我很难理解在MongoDB/node.js中查询日期的概念,即使在阅读了Google中的许多SO和其他文章之后也是如此。
同时存储来自react DatePicker的日期 ;在mongodb中,它会根据我的时间区域少存储一天 ;但当它被提取时,它显示为相同的,我可以理解它再次被转换为区域设置
但是查询是如何响应的呢?
当我查询时 ;node.js/mongoose中的mongodb--我没有找到正确的结果,所以我的问题是在查询mongodb时--日期是如何传递给mongodb的?例如:
post.find({publish_date:{$GTE:new Date()}}
服务器的新日期值-localtime zone是什么?或 ;浏览器?
新的日期值是在比较数据库时转换为utc还是作为从服务器传递的数据进行比较?
我有一个post模型,我希望在published_date根据我的时区发布post。
例如-如果我将2021-01-21 mongo存储2021-01-20t18:30:00.000+00:00-可以理解它存储为UTC
现在当我在查询发布的帖子时,服务器的日期/时间是2021-01-21-它不是提取任何文档!
当我将publish_date更改为2021-01-22时,mongo存储2021-01-21T18:30:00.000+00:00,然后查询在文档上生成。
我不知道如何解决这个问题
这方面的任何帮助都是有帮助的
多谢了。
在MongoDB中,所有date
值都仅存储为UTC时间。
如果需要,客户端应用程序负责将这些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”)