【问题标题】:JavaScript: Date Object Bug in Specific Time ZoneJavaScript:特定时区中的日期对象错误
【发布时间】:2013-02-08 12:06:59
【问题描述】:

我有一个在 JavaScript 中使用 Date 对象的程序。我注意到该程序无法在所有时区(国家)正常运行。

所以我更改了我的 Windows 时区,但在特定日期得到了奇怪的结果。

使用这些代码行,我在许多时区都有相同的结果,但其中一个(也许是一些):

console.log( new Date( 2005, 2, 20 ) ); // 2005 Mar 20
console.log( new Date( 2006, 2, 20 ) ); // 2006 Mar 20


时区:UTC 00:00(正确)

时区:太平洋(美国和加拿大)-08:00(正确)

时区:纽芬兰-03:30(正确)

时区:中国+08:00(正确)

时区:伊朗+03:30不正确!

(请注意 19 Mar23:00:00日光标准
(我在 Chrome 中测试过同样的问题)

我已经用这个解决方案解决了这个问题:

new Date( Date.UTC(2005, 2, 20) );

但我想知道这里发生了什么?
+03:30 有什么错误吗?日光和标准有什么区别?

这很奇怪......

【问题讨论】:

标签: javascript date timezone


【解决方案1】:

日期对象没有问题。一些国家在春季和秋季观察夏令时以获得更多的日光时间。 Check Here。碰巧的是,2005 年 3 月 20 日,伊朗的时间实行夏令时。正确显示他们观察的时间(注意与 GMT 的差异从 +0430 变为 +0330)。在 2006 年的那一天,他们遵循常规时间,不受夏令时限制。

请参阅 cmets 中的“Frits van Campen”链接。

【讨论】:

  • 是的,它会完美运行。您获得的日期和时间在法律和技术上都是正确的。
【解决方案2】:

您应该统一时区或使时区显示为客户时区。 例如澳大利亚,我在下面使用 AU 悉尼时区

let expirationTime = new Date().toLocaleString("en-US", {timeZone: "Australia/Sydney"});
expirationTime = new Date(expirationTime);

希望对你有帮助☺

【讨论】:

    猜你喜欢
    • 2015-12-22
    • 2017-02-19
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2023-04-03
    • 2022-07-13
    • 2015-12-10
    • 2020-10-15
    相关资源
    最近更新 更多