Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么JavaScript日期在夏令时之后不更新?_Javascript_Node.js_Date - Fatal编程技术网

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

为什么JavaScript日期在夏令时之后不更新?,javascript,node.js,date,Javascript,Node.js,Date,疯狂约会 我所期待的 我有向Facebook messenger等平台发送广播的节点应用程序。用户订阅在设定的时间接收广播,例如每天下午2点 用户将通过一个字段nextQuoteDate保存到数据库中,该字段的日期对象值已修改为应用程序需要发送下一次广播的准确时间,例如2018-03-29T14:00:00.000Z。因此,应用程序会检查要向其广播的用户,例如,user.find({nextQuoteData:{$lte:new Date()}}),如果发送了广播,则此字段将额外获得一天:201

疯狂约会

我所期待的 我有向Facebook messenger等平台发送广播的节点应用程序。用户订阅在设定的时间接收广播,例如每天下午2点

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

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

这是我一直在玩的东西,试图理解这一点

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

但还没有解决办法。有什么建议吗?

见最后的
Z
?表示零小时偏移量。输出只是标准化为0偏移量的日期-这是一件国际化的事情-JavaScript实际上是正确的,并且允许这样做。

他们不会落后一个小时

2018年3月29日星期四14:37:39英国夏令时

英国夏季时间下午2:37

'2018年3月29日星期四14:37:45 GMT+0100(英国夏令时)'

英国夏季时间下午2:37

2018-03-29T13:37:48.508Z

下午1:37 UCT,比英国夏令时晚一小时,这是正确的

“2018-3-29 14:38:02”

下午2点38分,没有指定时区(但您要求的是当地时间,因此将是英国夏令时)

2018-03-29T13:38:10.000Z

下午1:38 UCT,比英国夏令时晚一小时,这是正确的

2018-03-29T14:38:15.000Z

下午2点38分UCT,比英国夏令时晚一个小时,这是错误的,因为你在字符串中输入了错误的时区


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


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

您需要清楚地了解您的要求。你在期待什么,你看到了什么?这可能是重复的感谢你的回答@Quentin,我没有正确地描述我的问题,所以我编辑了这个问题。