将DateTime转换为JavaScript时不一致

时间:2018-11-23 15:49:13

标签: javascript asp.net-web-api

我有一个{。{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

我期望的行为应始终为午夜,因为从服务器返回的日期始终为午夜。看来所有最近的日期都可以正确解析,但是过去的日期不正确。

2 个答案:

答案 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:0004: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,这可能正是您想要的。