我有一个将 DateTimeZoneHandling
设置为 Local
的 ASP.NET webapi,在转换为 JavaScript 日期时我得到了两个不同的结果。
示例 1
从服务器返回的日期 1932-10-13T00:00:00-04:00
var strDate = new Date("1932-10-13T00:00:00-04:00");
strDate.toISOString(); // 1932-10-13T04:00:00.000Z
strDate.toLocaleString(); // 10/12/1932, 11:00:00 PM
示例 2
从服务器返回的日期 2013-05-09T00:00:00-04:00
var strDate = new Date("2013-05-09T00:00:00-04:00");
strDate.toISOString(); // 2013-05-09T04:00:00.000Z
strDate.toLocaleString(); // 5/9/2013, 12:00:00 AM
我预计行为应该始终是午夜,因为从服务器返回的日期始终是午夜。似乎所有最近的日期都正确解析,但是,过去的日期不正确。
最佳答案
The timezone can vary in some locales, for example, I'm
UTC-0300
, and on certain season shifts it becomesUTC-0200
, so it indicates that your locale changed the offset too, making it display the time one hour lesser, basicaly because you locale adopted a different offset along the year.
下面的示例,我已将您的第一个示例更改为使用与第二个示例相同的日期和月份,以便证明旧日期与它无关。
console.log("Example One");
var strDate = new Date("1932-05-09T00:00:00-04:00");
console.log(strDate.toISOString());
console.log(strDate.toLocaleString());
console.log("--------------------------");
console.log("Example Two");
var strDate2 = new Date("2013-05-09T00:00:00-04:00");
console.log(strDate2.toISOString());
console.log(strDate2.toLocaleString());
关于UTC/Zulu time
的进一步解释
它已经规范化了iso date到祖鲁日期(零偏移 iso date )。它仍然是相同的日期时间,但它已将时区偏移量转换为小时,使时区偏移量为零。
date [2013-05-09]
separator [T]
time [00:00:00]
offset [-04:00]
基本方面是 00:00:00.000-04:00
与 04:00:00.000Z
相同。
关于javascript - 将 DateTime 转换为 JavaScript 时不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449600/