为什么Moment.JS无法正确解析24小时日期

时间:2014-06-14 23:18:36

标签: javascript node.js momentjs

每当我使用moment.js&解析日期时节点,它应该是12小时。考虑以下测试:

var moment = require('moment');

var dt1 = moment('14:00, 10 Jun 2014', 'HH:mm, DD MMM YYYY').toDate();
console.log('dt1:' + JSON.stringify(dt1, null, 4));

var dt2 = moment('02:00, 10 Jun 2014', 'HH:mm, DD MMM YYYY').toDate();
console.log('dt2:' + JSON.stringify(dt2, null, 4));

它给出了输出:

dt1:"2014-06-10T02:00:00.000Z"
dt2:"2014-06-09T14:00:00.000Z"

它几乎就像使用一些疯狂的时区解析它而不只是按照我想要的方式解析当地时区的日期,我原本认为这将是默认行为。

如何让它正常工作?

2 个答案:

答案 0 :(得分:2)

尝试以下

var dt1 = moment('14:00, 10 Jun 2014', 'HH:mm, DD MMM YYYY').format('HH:mm, DD MMM YYYY');

答案 1 :(得分:1)

Moment.js工作正常。您的问题的来源是JSON.stringify,它将日期转换为UTC。因此,您需要将时区添加到时间戳以修复该问题。最简单的方法是将您的第一个时刻对象转换为第二个对象以更改格式,并使用不带参数的格式调用设置默认格式(在此处查找默认格式)。

moment(moment('02:00, 10 Jun 2014', 'HH:mm, DD MMM YYYY').toDate()).format();

更新:

正如@MattJohnson所说,这更简单。不知道为什么它以前不适用于我,但它只需要:

moment('02:00, 10 Jun 2014', 'HH:mm, DD MMM YYYY').format()