我进行了一次网络服务调用,数据以JavaScript格式返回,其中包含日期。
"d": [{
"__type": "ServiceValues",
……………………..
"DateOfServiceStart": new Date(1453093200000),
"DateOfServiceEnd": new Date(1463457600000),
"CreatedDateTime": new Date(1453161233940),
"UpdatedDateTime": new Date(1453329075943),
...........
},
但是,当使用相同的方法显示从服务器收到的值时,JS不允许相同。
收到的CreatedDateTime值的服务器日期为“2016-01-18 18:53:53.940”。
我已经找到了几个同样的解决方案和moment.js。但没有一个有效。
我希望在从服务器收到日期时显示日期。
这是剪辑的相同内容,其中没有选项返回从服务器收到的日期。
<html><head><script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.min.js"></script></head><Body>
<div id="localDate"> </div>
<BR><BR>
<div id="time"> </div>
<script>
var localFormat = 'MM/DD/YYYY';
//SERVER DATE : “2016-01-18 18:53:53.940”
var serverDate = new Date(1453161233940);
var _helsenkiOffset = 2*60*60000;//maybe 3 [h*60*60000 = ms]
var _userOffset = serverDate.getTimezoneOffset()*60000; // [min*60000 = ms]
var _helsenkiTime = new Date(serverDate.getTime()+_helsenkiOffset+_userOffset);
var m = moment(serverDate).format(localFormat);
var mom = moment(1453161233940).format(localFormat);
document.getElementById("localDate").innerHTML += _helsenkiTime + '<BR>';
document.getElementById("localDate").innerHTML += serverDate.toUTCString() + '<BR>';
document.getElementById("localDate").innerHTML += m + '<BR>';
document.getElementById("localDate").innerHTML += mom + '<BR>';
</script>
</body>
</html>
答案 0 :(得分:1)
收到的CreatedDateTime值的服务器日期为“2016-01-18 18:53:53.940”。
该信息不正确,或该服务器的本地时间内的值,并且您的服务器似乎在GMT-05:00中。有问题的时间价值(1453161233940)实际上是2016年1月18日星期一23:53:53 UTC。所以我看到了两种可能性:您的服务器位于美国东部或加拿大,因为这些服务器位于1月份的东部标准时区(-05:00),或者某个地方某个地方错误地将该时间值调整了5个小时。 / p>
您可以使用各种Date
方法从getUTCXyz
对象获取UTC值(2016年1月18日星期一23:53:53 GMT + 0000)。然后,如果您想以某种方式调整它以进行显示,您可以使用各种setXyz
或setUTCXyz
方法(当然还有moment
等效方法)。
重要的是要记住-05:00 始终东部时间。东部时间的服务器将在一年中的大部分时间(东部标准时间)-05:00,但在夏令时期间的-04:00期间&#34; (东部夏令时)。
道德是,在存储日期时,您需要仔细考虑时区并以最适合您应用的方式存储日期。一种方法是始终以UTC格式存储日期,因为您可以在想要渲染时轻松地从UTC转换为任何其他时区。另一种方法是始终存储日期和其时区,这是SQL Server的datetimeoffset
类型所做的。