javascript - 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
对于这两个问题,可能是相同的解决方案。我希望有人可以指导我找到正确的解决方案。谢谢!
解决方案
推荐阅读
- python - 如何使用带有 x_train 和 y_train 变量数据的神经网络的 python 生成器?
- php - 不明白为什么我必须使用 json_decode 两次。Laravel 迁移和模型
- html - 带有小部件菜单的基于 Hugo 的网站也是下拉菜单?
- jquery - 传单 - 特征数据不会实时更新
- mysql - MySQL:子查询检查超过 14000 行的子查询优化问题
- spring-boot - 由于 lombok,Gradle 构建失败
- python - 将多列从 String 转换为 Float 和 Int
- node.js - 在 Mongoose 中更新嵌套对象
- javascript - Joi:根据其他键的值过滤值
- excel - VBA代码从工作表上的下拉菜单中选择值并转到与同一工作表上的标题具有相同值的列 - Excel 2010