var date1 = "2015-03-29";
console.log(new Date(date1)); //Output:Sun Mar 29 2015 05:30:00 GMT+0530 (India Standard Time)
var date2 = "1869-12-31";
console.log(new Date(date2)); //Output:Fri Dec 31 1869 05:53:20 GMT+0553 (India Standard Time)
var date3 = "1870-01-01";
console.log(new Date(date3)); //Output:Sat Jan 01 1870 05:21:10 GMT+0521 (India Standard Time)
在调试一些 Date() 相关问题时,看到 Date() 具有不同输入的上述行为。
即使我的系统时区是 GMT +05:30,所有三个输入的时区都不同
这是预期的吗?
提前感谢您的任何帮助!
您显示的值是正确的。
ECMAScript 要求YYYY-MM-DD
格式中的仅日期值被视为 UTC。从规范:
...当 UTC 偏移量表示不存在时,仅日期形式被解释为 UTC 时间,日期时间形式被解释为本地时间。
然后该toString
函数将转换为本地时间的字符串表示形式,其中考虑了系统时区。
可以在此处找到印度的 IANA 时区数据,包括丰富的文档注释。数据本身如下(从 tzdata 2021a 版开始):
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
5:53:20 - HMT 1870 # Howrah Mean Time?
5:21:10 - MMT 1906 Jan 1 # Madras local time
5:30 - IST 1941 Oct
5:30 1:00 +0630 1942 May 15
5:30 - IST 1942 Sep
5:30 1:00 +0630 1945 Oct 15
5:30 - IST
您可以在第二行和第三行数据中从示例中看到两个较早的偏移量。如果您选择更早的日期(1854-06-28 之前),您将获得第一行的偏移量。您还可以看到印度在两个不同的历史时期使用了 +06:30 偏移量。
所有历史记录也以更易读的形式在timeanddate.com 上提供。
这就是时区的工作方式。它们不固定为单个数字偏移量,而是一个偏移量适用于特定时间点的时区,并且该偏移量可以根据控制该时区的政府的心血来潮改变。有关更多信息,请阅读timezone tag wiki 中标题为“Time Zone != Offset”的部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句