我从ASP.NET webapi2服务收到以下日期作为JSON数据。
{
creationDate: "2014-11-18T15:16:56.363"
... //other fields...
}
系统中的日期存储为UTC日期,与时区无关。 当数据返回并显示在屏幕上时,会使用不正确的时间,因为时刻假定要解析的日期是本地时间,而不是UTC。
moment(text).tz('Africa/Johannesburg').fromNow();
过去给我两个小时的时间值,当时它们应该是最新的。如何解析/传递日期,以便知道它应该添加时区。在我的情况下,GMT + 2或SAST。
添加时区(GMT)似乎无济于事。
Date.parse('2017-04-15T09:09:48.9590011 UTC')
结果为NaN
答案 0 :(得分:1)
您至少有两个选择:
在字符串末尾添加Z
:
moment(creationDate + "Z")
使用.utc
然后.local
:
moment.utc(creationDate).local()
以下是一个例子,使用的日期几乎总是在夏令时("夏令时"),以便它甚至适用于我们在英国的人(谁格林威治标准时间是如此,所以我们很难判断我们是否获得了UTC或本地结果:-)):
var creationDate = "2014-05-18T15:16:56.363";
console.log("String:", creationDate);
console.log("1:", moment(creationDate + "Z").toString());
console.log("2:", moment.utc(creationDate).local().toString());

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;
答案 1 :(得分:0)
问题是,当您发送/接收客户端和服务器将尝试转换为其时区的日期时,诀窍是,将日期作为字符串传递。 当您返回或发送数据时,请删除&#34; T&#34;
{
creationDate: "2014-11-18 15:16:56.363"
... //other fields...
}
OR
data.creationDate.replace('T', ' ')
因此,当客户收到数据时,它不会更改或转换日期。然后你可以使用
new Date(moment(data.creationDate.replace('T', ' ')))
这将返回您从服务器发送的内容