Javascript 为什么Moment.JS不能正确解析24小时日期
每当我使用moment.js&node解析日期时,它与应该的时间正好相差12小时。考虑下面的测试:Javascript 为什么Moment.JS不能正确解析24小时日期,javascript,node.js,momentjs,Javascript,Node.js,Momentjs,每当我使用moment.js&node解析日期时,它与应该的时间正好相差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:
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"
这几乎就像它使用一些疯狂的时区来解析它,而不是像我想的那样解析本地时区中的日期,我认为这是默认行为
如何使其正常工作?尝试以下方法
var dt1 = moment('14:00, 10 Jun 2014', 'HH:mm, DD MMM YYYY').format('HH:mm, DD MMM YYYY');
Moment.js工作正常。问题的根源是将日期转换为UTC的JSON.stringify。因此,您需要将时区添加到时间戳中以修复该问题。最简单的方法是将第一个瞬间对象扭曲到第二个瞬间对象以更改格式,并使用无参数的format调用设置默认格式(在此处查找默认格式) 更新: 正如@MattJohnson所指出的,这更简单。我不知道为什么以前它对我不起作用,但我只需要:
moment('02:00, 10 Jun 2014', 'HH:mm, DD MMM YYYY').format()
输出中的
Z
表示并包含在其中,因为Date
s是。我要做的就是解析上面非常奇怪的文本日期,然后将其作为DateTime字段放入MongoDB中。如果你能解释一下如何从某个时刻获取本地日期,我会接受它作为答案。格式
函数是这里的关键。不需要在另一个时刻中包装该时刻。我只是在回答之前检查了一下,发现该时刻.format()不适用于不符合ISO-8601格式的日期。所以这是必要的,奇怪。我会检查我上次得到了什么。
moment('02:00, 10 Jun 2014', 'HH:mm, DD MMM YYYY').format()