2016-12-01 94 views
1

我做new Date()然后将它保存到mongodb中,日期成为UTC格式?datetime UTC转换mongodb

我在插入mongodb时插入的日期时间不一样,我该怎么做才能解决这个问题?就像我在2016年1月12日创建文档一样,我选择范围从2016年1月12日开始,该记录不存在。奇怪。

回答

0

正如documentation说:

蒙戈壳包覆与ISODate帮手Date对象。 ISODate使用UTC。

所以我最好的猜测是你的new Date()不是UTC。

Math.floor((new Date()).getTime()/1000)

为在这里看到:How do I get a UTC Timestamp in JavaScript?

然而,蒙戈是足够聪明,解决这一切为你,所以new Date()应该够了。

要在mongo中查询日期,您还可以使用纯日期对象,而不需要将它们转换为ISOString。

将所有内容保留为日期对象,并且它将按照您的意图工作!

+0

所以基本上我不能做新的日期(),但Date.UTC(保存时区),如果我想使用mongodb? –

+0

虽然你不应该需要这个,但Mongo很聪明,可以为你整理一切。你能告诉我们你插入的内容,以及mongo文档中写的是什么? – xShirase

+0

如果是这种情况,为什么我应该有这个奇怪的错误? –

0

node.js new Date()对象的默认时区为UTC(又名GMT)。

你应该这样离开它,只是把它转换到你的前端。浏览器中的Javascript可以自动将UTC时间戳转换为浏览器本地时区。

new Date(Date.UTC(saved-timezone)) 

How do you create a JavaScript Date object with a set timezone without using a string representation

+0

所以基本上我不能做新的日期(),但Date.UTC(保存时区),如果我想使用mongodb? –

+0

您总是希望以UTC保存日期,并在检索后将它们转换为本地时区。只要将其保留为UTC,并使用上面的代码将时间转换为检索后的本地时区。 – Porlune

+0

检索后转换前端的时间? –