没有时区的Javascript日期

时间:2016-03-29 09:33:08

标签: javascript momentjs

我进行了一次网络服务调用,数据以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>

1 个答案:

答案 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)。然后,如果您想以某种方式调整它以进行显示,您可以使用各种setXyzsetUTCXyz方法(当然还有moment等效方法)。

重要的是要记住-05:00 始终东部时间。东部时间的服务器将在一年中的大部分时间(东部标准时间)-05:00,但在夏令时期间的-04:00期间&#34; (东部夏令时)。

道德是,在存储日期时,您需要仔细考虑时区并以最适合您应用的方式存储日期。一种方法是始终以UTC格式存储日期,因为您可以在想要渲染时轻松地从UTC转换为任何其他时区。另一种方法是始终存储日期其时区,这是SQL Server的datetimeoffset类型所做的。