gpt4 book ai didi

javascript - 为什么 JavaScript 日期在夏令时后不更新?

转载 作者:行者123 更新时间:2023-12-03 02:11:12 24 4
gpt4 key购买 nike

JS 日期疯狂

我期待什么

我有 Node 应用程序,可以将广播发送到 Facebook Messenger 等平台。用户订阅在设定的时间接收广播,例如每天下午 2 点。

用户将通过字段 nextQuoteDate 保存到数据库,其中 Date 对象值被修改为应用程序需要发送下一次广播的确切时间,例如2018-03-29T14:00:00.000Z。因此,该应用程序会检查要广播的用户,例如user.find({ nextQuoteData: {$lte: new Date()} }) 如果发送广播,则此字段将获得额外的一天:2018-03-30T14:00:00.000 Z.

我现在看到的

夏令时后,我的所有 Node 应用程序现在都在一小时后发送广播。所以现在不是下午 2 点,而是下午 3 点。这是因为当我期待 2018-03-29T14:37:48.508Z 时,new Date() 返回 2018-03-29T13:37:48.508Z。 p>

这是我一直在尝试理解这一点的方法。

me$ date
Thu 29 Mar 2018 14:37:39 BST
me$ node
> Date()
'Thu Mar 29 2018 14:37:45 GMT+0100 (BST)'
> new Date()
2018-03-29T13:37:48.508Z
> new Date().toLocaleString()
'2018-3-29 14:38:02'
> new Date(new Date().toLocaleString())
2018-03-29T13:38:10.000Z
> new Date(new Date().toLocaleString() + ' GMT')
2018-03-29T14:38:15.000Z

但是还没有解决方案。有什么建议吗?

最佳答案

他们没有晚一个小时。

Thu 29 Mar 2018 14:37:39 BST

英国夏令时间下午 2.37

'Thu Mar 29 2018 14:37:45 GMT+0100 (BST)'

英国夏令时间下午 2.37

2018-03-29T13:37:48.508Z

下午 1.37 点(UCT),比 BST 晚一小时,这是正确的

'2018-3-29 14:38:02'

2.38pm,没有指定时区(但您询问了区域设置时间,因此将是 BST)

2018-03-29T13:38:10.000Z

1.38pm UCT,比 BST 晚一小时,这是正确的

2018-03-29T14:38:15.000Z

UCT 下午 2.38 点,比 BST 晚一小时,这是错误的,因为您在字符串中写入了错误的时区。

<小时/>

将时间戳转换为 UCT 是一件非常正常的事情。它允许对它们进行一致的处理。

您可能希望避免必须显式格式化它们(例如使用 toLocaleString)以向人类显示,但这不是 Date 对象的工作方式,因此您必须忍受它.

关于javascript - 为什么 JavaScript 日期在夏令时后不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49563962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com