Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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中将UTC日期转换为本地时间(矩.js)_Javascript_Asp.net Mvc_Asp.net Web Api2_Momentjs - Fatal编程技术网

在javascript中将UTC日期转换为本地时间(矩.js)

在javascript中将UTC日期转换为本地时间(矩.js),javascript,asp.net-mvc,asp.net-web-api2,momentjs,Javascript,Asp.net Mvc,Asp.net Web Api2,Momentjs,我从ASP.NET webapi2服务接收以下日期作为JSON数据 { creationDate: "2014-11-18T15:16:56.363" ... //other fields... } 系统中的日期存储为UTC日期,与时区无关。 当数据返回并显示在屏幕上时,使用了不正确的时间,因为moment假设正在解析的日期是本地时间,而不是UTC moment(text).tz('Africa/Johannesburg').fromNow(); 给我过去两个小时的时间值,而

我从ASP.NET webapi2服务接收以下日期作为JSON数据

{
    creationDate: "2014-11-18T15:16:56.363"
    ... //other fields...
}
系统中的日期存储为UTC日期,与时区无关。 当数据返回并显示在屏幕上时,使用了不正确的时间,因为moment假设正在解析的日期是本地时间,而不是UTC

moment(text).tz('Africa/Johannesburg').fromNow();
给我过去两个小时的时间值,而它们实际上应该是当前的。如何解析/传递日期,以便moment知道应该添加时区。在我的例子中,GMT+2或SAST

添加时区(GMT)似乎没有帮助

Date.parse('2017-04-15T09:09:48.9590011 UTC')

结果在
NaN

中,您至少有两个选项:

  • 在字符串末尾添加一个
    Z

    moment(creationDate + "Z")
    
  • 使用
    .utc
    ,然后使用
    .local

    moment.utc(creationDate).local()
    
  • 这里有一个例子,使用一个几乎总是在夏令时(“夏令时”)的日期,这样它甚至适用于我们英国人(他们在格林尼治标准时间,所以很难判断我们得到的是UTC还是本地结果:-):

    var creationDate=“2014-05-18T15:16:56.363”; log(“字符串:”,creationDate); console.log(“1:,力矩(creationDate+“Z”).toString(); log(“2:,moment.utc(creationDate.local().toString())
    问题在于,当您发送/接收客户端和服务器都将尝试转换为其时区的日期时,技巧在于,将日期作为字符串传递。 返回或发送数据时,请删除“T”

    {
        creationDate: "2014-11-18 15:16:56.363"
        ... //other fields...
    }
    

    因此,当客户端收到数据时,它不会更改或转换日期。然后你可以用

    new Date(moment(data.creationDate.replace('T', ' ')))
    
    这将返回从服务器发送的内容:“如果要以UTC格式解析或显示某个时刻,可以使用矩.UTC()而不是矩()
    new Date(moment(data.creationDate.replace('T', ' ')))