gpt4 book ai didi

JavaScript date.setMilliseconds 奇怪的行为?

转载 作者:行者123 更新时间:2023-11-29 19:08:00 26 4
gpt4 key购买 nike

为什么会这样-

var date   =  new Date('2015-10-24T23:31:04.181Z');
date.toISOString(); // "2015-10-24T23:31:04.181Z"
date.setMilliseconds(date.getMilliseconds() + 1);
date.toISOString(); // "2015-10-24T22:31:04.182Z"
  • HOUR 后移了一位 (23 -> 22)
  • 适用于其他日期

是不是时区问题?为什么不是所有日期值都会发生这种情况?

谢谢

最佳答案

这是夏令时,以一种非常不明显的方式。 :-)

耶路撒冷的 2015-10-24T23:31:04.181Z 是 2015 年 10 月 25 日 01:31:04 GMT+0200(耶路撒冷标准时间)夏令时结束且时钟倒退的日期/时间 (reference) .具体来说,在Groundhog Hour内:当天有两个01:31:04,第一个是夏令时,第二个是标准时间一小时后。

您正在使用 setMilliseconds,这是一个本地时间 函数。您可能知道,JavaScript 的 Date 很聪明地处理日期字段之间的翻转(尽管在这种特殊情况下没有翻转),因此 setMilliseconds 的逻辑必须处理允许可能的翻转。这是 detailed in the specification , 但从根本上说,它采用当前时间值(自大纪元以来的毫秒数),从中生成本地日期/时间,完成工作,然后必须将该本地日期/时间转回新的时间值。

但这就是问题所在:那天的那两个 01:31:04。 V8 在确定实际日期/时间时必须选择一个。它选择夏令时,比您的原始日期/时间早一个小时。

如果您使用 setUTCMilliseconds,这不会发生,因为没有本地时间的往返。

故事的寓意:如果您在 UTC 中工作,请只在 UTC 中工作。 :-)

关于JavaScript date.setMilliseconds 奇怪的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280708/

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