为什么这些日期构造函数会产生不同的结果?

Why do these date constructors produce different results?

提问人:madmonkey 提问时间:8/19/2023 更新时间:8/19/2023 访问量:31

问:

数据库中的日期格式:2023-08-19T04:03:57

上面的条目是在美国东部时间凌晨 12:03 进行的。

new Date("2023-08-19T04:03:57") = 2023-08-19T08:03:57.000Z

这并没有给我预期的结果。 将给我美国东部标准时间凌晨 4:03。.toLocaleString

如果我手动附加“Z”:

new Date("2023-08-19T04:03:57Z") = 2023-08-19T04:03:57.000Z我得到了预期的结果,可以正确使用本地化函数。

为什么会发生这种情况,有没有更好的解决方案,每次我需要在客户端计算机上使用这些时间戳时手动附加“Z”?

javascript 日期 日期 解析 时间

评论

0赞 CollinD 8/19/2023
JS Date 构造函数假定输入位于本地计算机的时区中,除非在日期字符串 afaik 中指定时区。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/......这涉及到细节
1赞 derpirscher 8/19/2023
2023-08-19T04:03:57是当地时区的 04:03,是 UTC 的 04:03。由于美国东部时间目前是 UTC-4(即比 UTC 晚四个小时),这些是您观察到的小时差异......根据您的要求,您可以将本地时间存储在数据库中。但你必须意识到,当你的客户在时区之间移动时,这可能会导致奇怪的结果。2023-08-19T04:03:57Z
0赞 RobG 8/19/2023
正如@derpirscher所说,“2023-08-19T04:03:57”被解析为本地(即使用主机区域设置),因为时间戳中没有偏移量。“2023-08-19T04:03:57Z”解析为 UTC,因为根据 ECMA-262,尾随 Z 表示 UTC(无偏移量)。
1赞 RobG 8/19/2023
可能是 Date.parse 意外返回字符串的副本,或者使用 javascript 解析 UTC 日期,甚至是为什么 Date.parse 给出不正确的结果?
1赞 derpirscher 8/19/2023
数据库存储的正是这一点,你告诉它存储什么......我们不知道您的查询,也不知道您传递了哪些数据。而且我们不知道您的要求,因此我们无法告诉您在数据库中存储什么......

答: 暂无答案