【问题标题】:Parsing dates in node.js: moment.utc() is not returning the correct UTC unix time在 node.js 中解析日期:moment.utc() 未返回正确的 UTC unix 时间
【发布时间】:2016-07-30 23:24:01
【问题描述】:

我正在尝试解析日期字符串并将相应的 unix 时间返回到 UTC 区域中日期开始时的午夜。但是,我的 node.js 在我的时区的那个日期开始时一直返回 unixtime。

我做错了什么?这应该将 1440633600 打印到控制台,但它会打印一个与我的时区中的 unix 时间相对应的数字,而不是 UTC。

    var moment = require('moment');
    var datestring = "August 27 2015";
    var unixDate = new Date(datestring);
    var myDate = moment.utc(unixDate);
    console.log(myDate.format('X'));

"datestring" 并不总是在末尾包含“Z”(表示 UTC),但有时可能,所以我不能在解析之前添加一个“Z”。这里一定有一些我想念的东西......

【问题讨论】:

    标签: node.js date datetime unix unix-timestamp


    【解决方案1】:

    TL;DR:

    var myDate = moment.utc(datestring, 'MMMM DD YYYY');

    解释:

    var unixDate = new Date(datestring);datestring 设置为 "August 27 2015" 会将 unixDate 设置为与您所在时区的 2015 年 8 月 27 日午夜相对应的时间戳。

    随后,var myDate = moment.utc(unixDate)myDate 设置为设置为同一时间的 moment 对象。由于您发送的是时间戳而不是日期,因此没有理由调整时区。由于您根据您所在时区的时间生成时间戳,这就是 moment 所看到的。

    一个解决方法是将该行更改为var myDate = moment.utc(datestring, 'MMMM DD YYYY');。由于moment 将获取要处理的字符串而不是 UNIX 时间戳,因此它将选择 UTC 时间 2015 年 8 月 27 日午夜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多