首页 > 解决方案 > Javascript 日期对象:startDate < nowDate 逻辑由于客户端上的时区差异而无法正常工作

问题描述

在我的服务器上,我有多个带有“start_date”字段的事件,此信息通过以下结构发送到客户端:

{
    id: 1,
    name: 'Cooking masterclass',
    start_date: '2021-06-21',
    end_date: '2021-06-25',
}

当我收到客户端上的事件列表时,我想将它们分类为 2 个类别:正在进行和即将发生,所以我的代码看起来像这样

const ongoingEvents = [], upcomingEvents = []

for (const event of allEvents) {
    const startDate = new Date(Date.parse(event.start_date))
    const nowDate = new Date()

    if (startDate < nowDate) {
        ongoingEvents.push(event)
    } else {
        upcomingEvents.push(event)
    }
}

问题是当我检查“startDate”和“nowDate”是什么时,它看起来像这样。如您所见,开始日期不显示 6 月 21 日,而是显示 6 月 20 日下午 5 点。

startDate: Sun Jun 20 2021 17:00:00 GMT-0700 (Pacific Daylight Time)
nowDate:   Sun Jun 20 2021 18:36:51 GMT-0700 (Pacific Daylight Time)

例如,即使活动在 21 日开始,但在 20 日下午 6:36 时,它会在“进行中”部分显示活动已经开始,因为下午 6:36 晚于下午 5:00。

处理这个问题的最佳方法是什么?

我遇到的另一个问题是我想以这种格式在我的客户中显示活动的开始日期:

Start Date: June 21

但是当我使用 startDate 变量格式化成这样的字符串时:

const startString = startDate.toLocaleString('en-US', { month: 'short', day: 'numeric' })
const endString  = endDate.toLocaleString('en-US', { month: 'short', day: 'numeric' })

我得到:

Start Date: June 20

对于这两个问题,可能是相同的解决方案。我希望有人可以指导我找到正确的解决方案。谢谢!

标签: javascript

解决方案


推荐阅读