当前位置: 首页 > 知识库问答 >
问题:

Mongodb和Node.js datetime时区问题

子车修平
2023-03-14

我很难理解在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,然后查询在文档上生成。

我不知道如何解决这个问题

这方面的任何帮助都是有帮助的

多谢了。

共有1个答案

阎鸿煊
2023-03-14

在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”)

 类似资料:
  • 你好,我在node js mongodb工作。 当我将数据插入到集合中时,数据存储为默认的ISODate,例如ISODate(“2016-06-17T13:00:21.665Z”) 我想插入的日期字段应该存储在UTC。 它已经以UTC格式存储,或者需要更改代码中的任何内容? 请任何人推荐我。 我的代码: Mongo插入数据: 我检查了文档中的引用-Mongo UTC引用: Date()在mongo

  • 我还看到“cdt”快捷方式正在linux“zdump”输出中使用: ZDUMP-V美国/哈瓦那grep 2013美国/哈瓦那Sun 2013年3月10日04:59:59 2013 UTC=Sun 3月9日23:59:59 2013 CST ISDST=0 GMTOFF=-18000美国/哈瓦那Sun 2013年3月10日05:00:00 2013 UTC=Sun 2013年11月3日04:59:5

  • 问题内容: 我的服务器时间是格林尼治标准时间(GMT),每当有人在线时,我都会执行以下操作。 所以,我的问题是……每当有人执行某项操作时,它都会将日期/时间存储在用户本地时间中……这给我带来了很多麻烦。 我想要的是将所有内容存储在GMT中,但要让用户在其本地时区查看数据并与之交互。 编辑: 这是我更新用户状态的方法: 这是我将日期戳转换为秒的功能。 最后,我如何比较日期: 问题答案: 这里的技巧是

  • 问题内容: 让我们考虑以下代码: 运行此代码段时,我将显示以下输出: 为什么我会得到不同的时区? 请注意,如果我将8月的第一个日期设置为9月,将第二个日期设置为9月,则在两种情况下输出将显示相同的时区: 将显示: 我正在使用Java 1.6.0_14 问题答案: 是中欧夏季时间。它与夏令时生效相同。

  • 我正在构建一个react应用程序,使用MongoDb和express后端作为数据库。我的一个模型具有属性日期,类型为date。 然后,在我的反应应用程序上,我有一个表单,我在其中输入所有这些信息。但是如果我把一个日期,比如01/11/2017,保存的日期是31/10/2017。据我所知,这是因为MongoDd以UTC格式存储日期。有没有办法改变这种行为?因为同样,当我尝试按日期搜索时,这个问题也给

  • 本文向大家介绍RDBMS和MongoDB之间的区别,包括了RDBMS和MongoDB之间的区别的使用技巧和注意事项,需要的朋友参考一下 关系数据库管理系统 RDBMS代表关系数据库管理系统。它以实体形式将数据存储为表格。它提供了有关信息安全性的多层。每个表可能有也可能没有主键(用于标识表中的唯一记录)和外键(用于标识两个表之间的关系)。RDBMS使用SQL语言查询数据库。流行的RDBMS的示例是o