使用node.js和moment.js的字符串到日期mongodb

时间:2015-09-27 16:17:10

标签: javascript node.js mongodb momentjs

在我的应用程序中,我允许用户使用日期选择器组件设置日期。

我的问题是,当尝试将字符串日期转换为UTC / ISO日期格式时,转换没有正确进行,请参阅下面的示例。

示例:

用户选择的字符串日期:01/09/2015 (DD/MM/YYYY)

我使用moment.js将上述日期转换为原生JS日期,见下文:

moment(req.body.datePicker,'DD/MM/YYYY')

直到这里都很好,但是当存储在db中的数据日期减少了1天。我不知道它搞砸了。

我已设法使用jsfiddle-example创建可重新制作的方案,请查看更好的理解。

我的假设:

当我看到db集合时,日期将以默认时间存储:18:30:00.00Z enter image description here

这可能是日期变化的原因之一。

2 个答案:

答案 0 :(得分:1)

您的问题是时区

在我的情况下,01/09/2015给出了2015-01-08T23:00:00,这是因为我的时区是格林尼治标准时间+ 1,所以只有-1小时

答案 1 :(得分:0)

在做了一些研究后,我自己找到了解决这个问题的解决方案或黑客,它可能不是正确的方法,但对于当前的情况,它就像一个魅力。

<强>解决方案:

我所做的只是创建了一个完整的ISO / UTC日期字符串,将时间硬编码为零。 moment(req.body.datePicker,'DD/MM/YYYY').format('YYYY-MM-DD HH:mm:ss.000').toString()+'Z'通过执行此操作,默认时间将始终设置为零,并且由于字符串是完全限定的ISO / UTC标准格式,因此mongoDB不会尝试更改它。

工作示例:

http://jsfiddle.net/r42jg/1004/

如果有任何人有更好的解决方案,请在此发布,以便我们可以更好地即兴发挥。