【问题标题】:Why moment js gives different milliseconds?为什么时刻 js 给出不同的毫秒数?
【发布时间】:2019-04-09 03:38:37
【问题描述】:

我使用 Moment js 得到同一日期不同毫秒的错误。

我正在从服务器 ('-2208988800000') 获取数据。我转换了'DD-MMM-YYYY' 中的值。现在我又想要相同的毫秒,为什么我得到相同日期的不同毫秒?这是我的代码

http://plnkr.co/edit/1QoWLoFqkNAe2ebZ0V01?p=preview

我有两个控制台x1x2。它们是不同的,为什么?

var x = '-2208988800000'
var d = new Date(moment(new Date(parseInt(x)).toUTCString()).format('DD-MMM-YYYY'));
console.log(d)
var x2 = moment(new Date(d).toUTCString()).format('x');
console.log(x2)
// why x1 and x2 is different
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

我怎样才能得到相同的值?

【问题讨论】:

    标签: javascript angularjs momentjs angular-moment


    【解决方案1】:

    当您将日期格式设置为 DD-MMM-YYYY 时,您会丢失小时和分钟,这是部分原因

    尝试将您的代码更新为

    var d = new Date(moment(new Date(parseInt(x)).toUTCString()).format('DD-MMM-YYYY HH:mm:ss'));

    你会得到一个更接近的时间戳

    【讨论】:

      【解决方案2】:

      您在时刻对象、日期对象和字符串之间来回进行了大量的操作。目前尚不清楚您真正想要完成什么,但这些都不是必需的。

      至于结果,第一次调用日期构造函数得到字符串值'31-Dec-1899',因此您可以将示例简化为:

      var d = new Date('31-Dec-1899');
      console.log(+d);
      

      这将根据您运行的浏览器给出不同的结果(因为日期对象的解析实现在非标准格式时取决于实现),并且会因运行代码的时区而异(因为它假定值是本地时间)。

      对我来说,在美国太平洋时区的 Windows 10 上的 Chrome 70 中运行,这会记录 -2209046400000。您可能会得到不同的结果。

      一般来说,不要做太多的操作。您可能想要的大多数功能都内置在 Moment 中。每当您发现自己转换为字符串并转换回对象时,或者使用 Date 构造函数时,您都可能会引入错误。

      【讨论】:

      • 所以最好的办法是实现 DOB
      • 你能说得更具体点吗?你到底想做什么?
      • 我会再解释一秒钟。实际上,我从服务器获取长值以 DD-MMM-YYYY 格式显示 DOB(出生日期)。用户可以选择编辑出生日期并发送在长或毫秒内到服务器相同。如果没有变化,用户应该发送从服务器获得的相同值
      • 此时,您可能应该提出一个新问题。先搜索momentjs标签,通读Moment.js网站上的guidesdocs
      猜你喜欢
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2017-02-22
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      相关资源
      最近更新 更多