我有一个{。{1}}设置为DateTimeZoneHandling
的ASP.NET webapi,在转换为JavaScript日期时得到了两个不同的结果。
示例1
从服务器Local
返回的日期
1932-10-13T00:00:00-04:00
示例2
从服务器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
返回的日期
2013-05-09T00:00:00-04:00
我期望的行为应始终为午夜,因为从服务器返回的日期始终为午夜。看来所有最近的日期都可以正确解析,但是过去的日期不正确。
答案 0 :(得分:1)
时区在某些语言环境中可能会有所不同,例如我是
UTC-0300
,并且在某些季节变化中它变为UTC-0200
,因此它表明您的语言环境也更改了偏移量,使其显示时间减少了一个小时,主要是因为您的语言环境在一年中采用了不同的偏移量。
下面的示例中,我将您的第一个示例更改为使用与第二个示例相同的日期和月份,以便证明您与旧日期无关。
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
相同。
答案 1 :(得分:0)
如果您只是想显示某个日期,因为当时居住的那个人会记得它(在您的情况下,10月13日发生在10月13日),则您可以(滥用)Moment Timezone ,它似乎可以按预期的格式设置日期:
moment.tz("1932-10-13T00:00:00-04:00", "America/Toronto").tz("UTC").format(); // 1932-10-13T04:00:00Z
对于您而言,此 hack 技术会导致1932-10-13T04:00:00Z
,这可能正是您想要的。