在我的应用程序中,我允许用户使用日期选择器组件设置日期。
我的问题是,当尝试将字符串日期转换为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
这可能是日期变化的原因之一。
答案 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/
如果有任何人有更好的解决方案,请在此发布,以便我们可以更好地即兴发挥。