2013-07-11 137 views
6

我想知道如果这是正常的,或者如果我错过在架构设置或查询过程的东西:猫鼬将存储的UTC日期转换为当地时间?

我的应用程序,而猫鼬,正确地存储日期在MongoDB中UTC。这可以通过mongo shell查看文档来确认。当我通过猫鼬从mongodb中检索文档时,日期现在是当地时间。

蒙戈外壳:查询结果的 http://cl.ly/image/2m3P212o0i2x

的console.log输出: http://cl.ly/image/3W2q3b1R0F3q

有没有办法查询时有猫鼬保持日期UTC?

回答

6

Mongoose和node.js对您的日期没有做任何事情,只不过是JavaScript Date类型产生本地时间字符串,当你打电话给toString()时,即使它实际上包含UTC的时间。

如果您需要UTC时间字符串,请在您的Date对象上明确呼叫toUTCString()

+1

哎呀。通过几种不同的方式记录查询结果后,我发现它是console.log,它显示当地时间的日期,因此很多时候调用toString()。很高兴知道未来......感谢您的回应。 –

1

时间戳以agnostically的形式存储在时区中,作为unix时间戳。此时间戳将跨时区工作,并且节点使用您当前的时区对其进行解释。您可以使用getUTC *方法从日期对象中检索UTC值,例如get getUTCHours()

+1

感谢您的回应,我明白我可以将其转换为UTC并从那里使用它。我似乎有点奇怪,猫鼬和/或节点会自动将它带入当地时间。也许更好的问题是:我可以明确告诉节点使用UTC ...类似于PHP或其他语言中的date_default_timezone_set函数吗? –

+1

@DM你用UTC或当地时间把东西放入猫鼬中吗?您可以使用process.env.TZ更改节点的时区,但不建议使用。 https://github.com/joyent/node/issues/3286 – WouterH

相关问题