String to Date mongodb 使用 node.js 和 moment.js

String to Date mongodb using node.js and moment.js

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

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

示例:

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

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

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

到这里为止都很好,但是当数据存储在数据库中时,日期减少了 1 天。我不知道它在哪里搞砸了。

我已经使用 jsfiddle-example 成功地创建了一个可重现的场景,请看一下以获得更好的理解。

我的假设:

当我看到数据库集合时,日期以默认时间存储:18:30:00.00Z

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

你的问题是时区

在我的例子中,01/09/2015 给出了 2015-01-08T23:00:00 这只有 -1 小时,因为我的时区是 GMT+1

经过一些研究,我自己终于找到了解决此问题的解决方案或破解方法,这可能不是正确的方法,但对于当前情况来说,它非常有效。

解法:

我所做的只是创建了一个完整的 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/

如果有人有更好的解决方案,请 post 在这里,以便我们更好地即兴创作。