Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换日期时忽略时区偏移量-javascript_Javascript_Wcf_Date_Datetime - Fatal编程技术网

转换日期时忽略时区偏移量-javascript

转换日期时忽略时区偏移量-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

我有一个WCF REST服务,它以以下格式返回日期:

/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
因此,当使用此值创建JavaScript
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-扩展了我的答案。如果我错过了什么,我会很高兴的。:)哈诵读困难症又发作了!谢谢-修正了。