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 在这里,以便我们更好地即兴创作。
在我的应用程序中,我允许用户使用日期选择器组件设置日期。
我的问题是当尝试将字符串日期转换为 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 在这里,以便我们更好地即兴创作。