解析 node.js 中的日期:moment.utc() 未返回正确的 UTC unix 时间

Parsing dates in node.js: moment.utc() is not returning the correct UTC unix time

我正在尝试解析一个日期字符串和 return 相应的 unix 时间到 UTC 区域日期开始时的午夜。但是,我的 node.js 在我的时区中那个日期的开始保持 returning 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",所以我不能在解析之前只添加一个 "Z"。这里一定有我遗漏的东西...

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 时间戳,因此它将 select 2015 年 8 月 27 日午夜(UTC)。