JSON日期与时区偏移量无法正确转换为JavaScript日期

7 浏览
0 Comments

JSON日期与时区偏移量无法正确转换为JavaScript日期

我从JSON API中得到了以下字符串:\n\"Date\": \"\\/Date(1381446000000+0100)\\/\",\n\n它应该是:\n

2013-10-11 00:00:00

\n但是实际上我得到了:\n

2013-10-10T23:00:00.000Z

\n我的代码:\n

new Date(parseFloat(oldDate.replace("/Date(", "").replace(")/", ""))); 

0
0 Comments

问题的原因是JSON日期带有时区偏移,在转换为JavaScript日期时无法正确处理时区偏移。解决方法是通过对JSON日期字符串进行处理,提取其中的时间戳并将其转换为JavaScript日期对象。但是这种方法忽略了时区偏移,因此除非偏移量为+0000,否则时间将不正确。下面是一个示例代码:

var date = "/Date(1381446000000+0100)/";
var d = new Date(parseFloat(date.replace("/Date(", "").replace(")/", "")));

上述代码可以将JSON日期转换为JavaScript日期对象,但是如果偏移量不是+0000,则时间将不正确。因此,需要对偏移量进行处理以获取正确的时间。根据测试,偏移量可以被视为以毫秒为单位的时间戳,该时间戳是相对于源位置的纪元时间的偏移量,并且偏移量的格式为HHmm。要将偏移量应用于时间戳以获取UTC时间,可以使用以下代码:

new Date(1381446000000 - 3.6e6).toISOString()

上述代码中的`1381446000000`是时间戳,`-3.6e6`是将偏移量`0100`转换为毫秒的值。执行上述代码后,将得到正确的UTC时间`2013-10-10T22:00:00.000Z`。

0