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

时间:2016-07-30 23:24:01

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

我正在尝试解析日期字符串,并将相应的unix时间返回到UTC区域中日期开始的午夜。但是,我的node.js会在MY时区中的该日期开始时返回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”。这里有一些我不想要的东西......

1 个答案:

答案 0 :(得分: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时间戳,因此将在2015年8月27日的UTC中选择午夜。