我很难理解在mongodb/node.js中查询日期的概念,即使在阅读了google中的许多SO和其他文章之后。
在mongodb中存储来自react datepicker的日期时,根据我的时区,它存储的时间要少一天,但当它被获取时,它显示的是相同的,我可以理解它再次被转换为locale
但是查询是如何响应的呢?
当我从node.js/mongoose查询mongodb时,我没有找到正确的resultSo,我的问题是查询mongodb时,日期是如何传递给mongodb的?例如:
post.find({publish_date:{ $gte:new Date()}}
什么是新的日期值-服务器的本地时区?还是浏览器?
是在比较数据库时将新的日期值转换为utc,还是从服务器传递时进行比较?
我有一个post模型,我希望根据我的时区在published_date上发布帖子。
例如,如果我将2021-01-21 mongo stores放入2021-01-20T18:30:00.000+00:00 -可以理解为存储为UTC
现在,当我查询要发布的帖子时,服务器日期/时间是2021-01-21 -它没有获取任何文档!
当我将publish_date更改为2021-01-22时,mongo store 2021-01-21T18:30:00.000+00:00,然后在文档上生成查询。
我不知道如何解决这个问题。
在这方面的任何帮助都是有帮助的。
谢谢。
发布于 2021-01-21 16:45:26
在MongoDB中,所有的Date值仅存储为UTC-time值。
如果需要,您的客户端应用程序负责将这些UTC时间显示为本地时间。
MongoDB不保留输入时区,如果您出于任何原因需要它,那么您必须将其存储在单独的字段中。
在Mongo中,您可以使用$dateToString显示本地日期/时间值
{ $dateToString: {
date: <dateExpression>,
format: <formatString>,
timezone: <tzExpression>,
onNull: <expression>
} }每当需要处理日期/时间值时,我都推荐使用moment.js库。
查询可能是这样的,例如:
{ $gte: moment().startOf('day').toDate() }我在瑞士,我们有UTC+01:00,因此moment().startOf('day').toDate()返回ISODate("2021-01-20T23:00:00Z")
https://stackoverflow.com/questions/65821702
复制相似问题