gpt4 book ai didi

Javascript:为什么日期不能返回正确的日期?

转载 作者:行者123 更新时间:2023-12-02 18:59:28 32 4
gpt4 key购买 nike

我来自巴西,我用 Javascript 编写了这段代码

var dt = new Date(2012,9,21);   // Oct-21-2012
alert(dt.getDate());

但是,它生成的是 20,而不是 21。我已经使用 Firefox 18、Chrome 24 和 Internet Explorer 8 进行了测试。

这怎么可能?

最佳答案

你遇到了一个巨大的巧合。

在巴西,2012 年 10 月 21 日是该国大部分地区夏令时的开始,因此巴西不存在 2012 年 10 月 21 日 0:0 到 1:0 之间的本地日期!

来自其他国家/地区的一些人在同一日期没有遇到同样的问题。

参见:http://www.timeanddate.com/news/time/brazil-dst-2012.html

在巴西,问题中的代码实际上输出 20

var dt = new Date(2012,9,21);  // 21-Oct-2012 0:0
alert(dt.getDate());

但是,轻微的变化会生成 21,因为 1 小时足以“跳过”丢失的一小时:

var dt = new Date(2012,9,21,1);  // 21-Oct-2012 1:00
alert(dt.getDate());

参见:http://www.timeanddate.com/time/dst/2013.html

评论后编辑:以美国为例,2013年3月10日将开始夏令时。

var dt = new Date(2013,02,10);  // March-10-2013
alert(dt.getDate()); // Output: 10

为什么是对的?因为在美国,夏令时在 2:00 跳跃,而不是像巴西那样在 0:00 跳跃,因此隐含的 0 小时可以保护生成的日期免受问题的影响。但是,耗时的计算仍然可能会出现错误。-/-

在巴西,这种情况应该会导致许多处理日期(无论时间)的网站出现错误。人们可能会在表单中输入日期,而算法会以错误的方式计算经过的天数。

例如,如果有人使用这个漂亮的 JavaScript 代码在表单中输入日期( DHML Goodies Calendar ),并且在决定将该日期保存在数据库中之后,如果运气不好遇到特殊日期,则可能会得到错误的日期。

最终的解决方案是使用 UTC(协调世界时)时间,因为没有夏令时更改,并且您使用一种抽象时间。在大多数实际应用中没有问题。

var dt = new Date( Date.UTC(2012, 9, 21, 8, 5, 12));
alert( (dt.getUTCMonth()+1) + '/' + dt.getUTCDate() + '/' +
dt.getUTCFullYear() + " " + dt.getUTCHours()+ ':' +
dt.getUTCMinutes() + ':' + dt.getUTCSeconds() );

不使用 UTC,如果有人不使用小时、分钟和秒,则更容易,只需在 Date() 调用中放置一个大于或等于 1 的虚拟小时值,如我上面所示。

评论后编辑:因此巴西(以及伊朗、黎巴嫩、巴拉圭、智利和葡萄牙等国家)应将夏令时的开始时间更改为 2:00 而不是 0:00,为了避免这种困惑并与更发达国家保持一致。-/-

关于Javascript:为什么日期不能返回正确的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948881/

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