我有一个返回日期的WCF REST服务,其格式如下:
/Date(1401993000000+0530)/
服务器上的日期值为:
6/6/2014 12:00:00 AM
我想在我的javascript代码中以UTC值解析它。
我尝试手动删除“+0530”字符串并将其解析为日期,但它会显示“无效日期”。
我还尝试根据这篇文章添加时区偏移量,但它给出了错误的值。
我该如何解析它?
我有一个返回日期的WCF REST服务,其格式如下:
/Date(1401993000000+0530)/
6/6/2014 12:00:00 AM
我想在我的javascript代码中以UTC值解析它。
我尝试手动删除“+0530”字符串并将其解析为日期,但它会显示“无效日期”。
我还尝试根据这篇文章添加时区偏移量,但它给出了错误的值。
我该如何解析它?
JavaScriptSerializer
和DataContractJsonSerializer
类中。然而,它受到了严厉批评,最终被弃用,取而代之的是标准的ISO 8601格式,它是大多数现代.NET代码中使用的Json.Net库的默认格式。你仍然会在WCF和旧版的ASP.NET MVC中看到它。/Date(1401993000000)/
- 仅时间戳/Date(1401993000000+0530)/
- 带偏移量的时间戳\/Date(1401993000000)\/
,这取决于它是如何生成的。解析器应该能够容忍这种情况,但不应该依赖它。DateTimeKind.Unspecified
的 DateTime
,它不可能映射回 UTC。在这种情况下,序列化程序将像具有 DateTimeKind.Local
一样运行。然后输出将反映计算机所在时区中调整为 UTC 的值,以及该时刻计算机的 UTC 偏移量。理想情况下,您不应该依赖此行为,因为来自不同时区的计算机会得到不同的结果。+HHmm
/-HHmm
,其中正值位于格林威治标准时间以东 - 与ISO 8601标准相同的方向。然而,与ISO 8601不同的是,该值部分不会根据该偏移量进行调整。它仍然是基于UTC的。/Date(1401993000000)/
= 2014-06-05T18:30:00Z
/Date(1401993000000+0530)/
= 2014-06-05T18:30:00Z
+ +0530
= 2014-06-06T00:00:00+05:30
Date
对象时,偏移量部分是多余的 - 因为Date
对象将一个基于UTC的时间戳包装起来,并且没有保留提供的偏移量的规定。var m = moment.parseZone("/Date(1401993000000+0530)/");
m.format() // "2014-06-06T00:00:00+05:30"
https://momentjs.com/timezone/
查看已编辑的消息,不使用momentjs:
var data = [ {"id":1,"start":"/Date(1401993000000+0530)/"} ];
var myDate = new Date(data[0].start.match(/\d+/)[0] * 1);
myDate = new Date(myDate.getTime() + myDate.getTimezoneOffset() * 60 * 1000);
alert(myDate);
new Date(1401993000000)
。 - Lennholm