Javascript 日期没有时区

标签 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>

最佳答案

The server date is “2016-01-18 18:53:53.940” for the CreatedDateTime value received.

这可能是不正确的,或者是该服务器的本地时间值,而您的服务器的时间显示为 GMT-05:00。有问题的时间值 (1453161233940) 实际上是 UTC 时间 2016 年 1 月 18 日星期一 23:53:53。所以我看到两种可能性:您的服务器位于美国东部或加拿大,因为这些服务器在一月份位于东部标准时区(-05:00),或者在此过程中的某个地方错误地将时间值调整了五个小时。

您可以使用各种 getUTCXyz 方法从 Date 对象获取 UTC 值(Mon Jan 18 2016 23:53:53 GMT+0000)。然后,如果您想以某种方式调整它的显示,您可以使用各种 setXyzsetUTCXyz 方法(或者,当然,它们的 moment 等价物)。

请务必记住,-05:00 并不总是东部时间。东部时间的服务器在一年中大部分时间为 -05:00(东部标准时间),但在“夏令时”(东部夏令时间)期间为 -04:00。

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

关于Javascript 日期没有时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36280454/

相关文章:

node.js - 如何在 pug 模板中运行 moment.js?

javascript - 创建多组不同颜色的簇

javascript - 查找最近的最外层导航(多个嵌套导航元素)

javascript - Bootstrap 'shown.bs.tab' 事件未以编程方式触发显示选项卡(使用选项卡 ('show' ))

javascript - 尝试从 jQuery.get() 返回值,总是以未定义结束

javascript - 如何使用 momentjs 获取特定的日期格式?

javascript - 获取两个日期之间线性分布的日期数组,给定所需日期的计数 - javascript、d3.js、moment.js

javascript - requestAnimationFrame 并知道浏览器何时重新绘制?

javascript - 将任何类型的 javascript 日期时间变量转换为 moment JS 对象

javascript - 每个月与一周中正确的日子对齐?