转换日期时忽略时区偏移量-javascript
我有一个WCF REST服务,它以以下格式返回日期:转换日期时忽略时区偏移量-javascript,javascript,wcf,date,datetime,Javascript,Wcf,Date,Datetime,我有一个WCF REST服务,它以以下格式返回日期: /Date(1401993000000+0530)/ 服务器上此日期的值为 6/6/2014 12:00:00 AM 我想用UTC值在我的javascript代码中解析它 我试图手动删除“+0530”字符串并将其解析为date,但它给出了“无效日期” 我也试着按此添加时区偏移量,但它给出的值不正确 如何解析它?您可以使用矩JS,这是在JavaSCript中使用datetime的更好方法之一。很多功能 查看编辑的消息,不带momentjs
/Date(1401993000000+0530)/
服务器上此日期的值为
6/6/2014 12:00:00 AM
我想用UTC值在我的javascript代码中解析它
我试图手动删除“+0530”字符串并将其解析为date,但它给出了“无效日期”
我也试着按此添加时区偏移量,但它给出的值不正确
如何解析它?您可以使用矩JS,这是在JavaSCript中使用datetime的更好方法之一。很多功能 查看编辑的消息,不带momentjs:
var数据=[{“id”:1,“start”:“/Date(1401993000000+0530)/”}];
var myDate=新日期(数据[0]。开始。匹配(/\d+/)[0]*1);
myDate=新日期(myDate.getTime()+myDate.getTimezoneOffset()*60*1000);
警报(myDate)
此格式通常被称为“ASP.NET JSON日期”-因为它首先出现在ASP.NET和.NET其他部分中使用的JavaScriptSerializer
和DataContractJsonSerializer
类中。然而,它是,并最终被弃用,取而代之的是标准格式,这是大多数现代.NET代码中使用的库中的默认格式。您仍然可以在WCF和旧版本的ASP.NET MVC中看到它
此格式有两个主要变体:
-仅时间戳/Date(1401993000000)/
-带有偏移量的时间戳/Date(1401993000000+0530)/
\/Date(1401993000000)\/
,具体取决于它的生成方式。解析器应该容忍这一点,但不应依赖于此
在所示的两种格式中,时间戳部分旨在表示自Unix纪元(1970-01-01 00:00:00.000 UTC)以来的毫秒数
我之所以说“有意”,是因为在.NET中,可以使用DateTimeKind.Unspecified
,将DateTime
映射回UTC。在这种情况下,序列化程序的作用就好像它有DateTimeKind.Local
。然后,输出将反映计算机本地时区中调整为UTC的值,以及该时间点的计算机UTC偏移量。理想情况下,您不应该依赖这种行为,因为您将从不同时区的计算机中获得不同的结果
当输出字符串中存在偏移量时,偏移量采用+HHmm
/-HHmm
格式,正值位于GMT以东-与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"
如果您正在查找Date
对象,您当然可以调用m.toDate()
。生成的Date
对象将具有相同的UTC时间戳,但由于Date
对象的工作方式,任何本地时间函数将仅使用主机环境的偏移量
换句话说,随着
Date
对象的输出,输入的+0530
部分将变得无用。您可能已经解析了/Date(1401993000000)/
这不应该给出无效日期:新日期(1401993000000)
请提供一个。强调可验证。@MikaelLennholm是的,但OP需要应用偏移量+0530。虽然我同意,但这并不是一个真正的答案。只是一个评论。我建议给OP一个MomentJ解决他们问题的快速例子。这会给出错误的结果。当它应该为提供的偏移量(即+0530)进行调整时,它为主机时区偏移量进行调整;你能解释一下这是怎么回事吗?OP说“2014年6月6日12:00:00在服务器上”,但没有说那是什么时区,你假设它也是+0530。@RobG-扩展了我的答案。如果我错过了什么,我会很高兴的。:)哈诵读困难症又发作了!谢谢-修正了。