当我使用moment解析时,Moment.js 2个不同的日期字符串给出相同的值

时间:2014-02-27 09:06:56

标签: javascript date momentjs

我正在解析2个不同的日期字符串

var d1  = '2014-02-01T00:00:00.000+0530'

var d2 = '2014-02-23T00:00:00.000+0530'   

当我用时刻解析它们时

alert(moment(d1, 'YYYY-MM-dd"T"HH:mm:ss.fffffff"Z"').toDate());
alert(moment(d2, 'YYYY-MM-dd"T"HH:mm:ss.fffffff"Z"').toDate());

他们两人打印2014年2月1日星期六xxxxx

它有什么问题?

这是我创建的小提琴的链接

jsfiddle

2 个答案:

答案 0 :(得分:1)

我认为你的格式化字符串时刻会导致问题。如果我删除它,日期不会打印相同。

http://jsfiddle.net/K5ub8/7/

编辑:具体问题是您使用的是dd一天,而不是DDhttp://momentjs.com/docs/#/parsing/string-format/

这是你的小提琴: http://jsfiddle.net/K5ub8/9/

但是,我不是百分之百确定小数秒,我相信它是SSS而不是fffffff但如果你需要满足小数秒,我会测试它。

我应该提一下,如果您使用toDate()将其转换回JavaScript日期对象,那么您实际上并不需要时刻格式参数,因为日期将以JSON日期格式格式化。

我会问你为什么要生成片刻格式的日期,然后将其转换回JavaScript,通常的做法可能是以JavaScript格式接收日期,然后创建一个可用于执行计算的时刻对象并以一种友好的用户友好方式显示。

答案 1 :(得分:1)

简单回答:你的格式有些偏差。

http://jsfiddle.net/K5ub8/8/

将格式调整为'YYYY-MM-DDTHH:mm:ss.SSSZZ'而不是'YYYY-MM-dd"T"HH:mm:ss.fffffff"Z"'后,效果很好。当您尝试调试此类问题时,将格式保存在单独的变量中始终是好的,这样您就可以使用您尝试解析的相同格式来显示您正在获取的内容。如果你这样做了,你会注意到'YYYY-MM-dd"T"HH:mm:ss.fffffff"Z"'由于打印出2014-01-Fr"T"11:32:03.fffffff"-08:00"而弄乱了。这显然不太正确。