javascript - 如何解决Node js和mongodb中的时区问题?

标签 javascript node.js mongodb momentjs

我正在尝试将开始和结束时间(如进入和退出时间逻辑)从 Node js插入Mongodb。 我的本地系统的时区是 IST。客户端和服务器的偏移量为+5:30。

现在请按照这个示例进行操作。

entryDate: 15-10-2018, 
start: 15-10-2018 01:00:00,
end: 15-10-2018 05:00:00

现在,由于我在客户端和服务器上处于同一时区,因此它不会更改我的日期值并创建新对象。

然后我将这些数据存储到 MongoDB 中。如您所知,mongo db 会将日期转换为 UTC,然后存储它。所以在我的数据库中它看起来像这样。

entryDate: ISODate("2018-10-15T00:00:00Z"), 
start: ISODate("2018-10-14T19:30:26Z"),
end: ISODate("2018-10-14T23:30:26Z")

现在,如果我想搜索一个查询,该查询应该为我提供 15 到 16 之间的日期和时间记录,那么我将不会获得任何数据。

现在考虑这个例子。我将应用程序移至服务器上。现在服务器时区采用 UTC。因此,我传递的每个日期都将直接转换为 UTC,因此它将像以前一样插入相同的数据。

现在的区别是,当我想搜索 IST 时区的日期范围时,它会给我精确的搜索日期,例如 (15-10-2018 00:00:00) 到 (16-10-2018 00:00) :00)。

在服务器上,它会将此日期转换为 UTC,并且可以给我少一天或可能更长的时间,例如 (14-10-2018 18:30:00) 到 (15-10-2018 18:30:00) )。所以从一开始我的查询就是错误的。

那么如何解决这个问题呢?谢谢。

最佳答案

经过一些研究。我有一个解决方案。

  1. 在客户端获取您的日期。
  2. 将该日期转换为 UTC 日期并将日期字符串传递到服务器。比如 2018 年 1 月 1 日 10:00:00。 (注意:我们只是转换日期,而不是时区)
  3. 在服务器端根据提供的日期创建一个日期对象,默认情况下会将日期转换为 UTC 时间。
  4. 使用 MongoDB 将日期存储在服务器端。由于日期采用 UTC 格式,因此不会再次转换日期并按原样存储。
  5. 现在,您将从服务器获取 UTC 格式的日期,例如“2018-01-01 10:00:00”。
  6. 现在在客户端,从此日期创建一个日期对象。这会将您的日期转换为您通过的实际日期。

这解决了我的问题。

关于javascript - 如何解决Node js和mongodb中的时区问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52813922/

相关文章:

javascript - 过滤组合中的服务器端选项

mongodb - 如何克服mongodb中的词法排序

java - Querydsl 与 MongoDB 的使用

javascript - 有效性检查在我的 javascript 代码中不起作用

javascript - 在 Chrome 扩展中,你能强制在一切之前注入(inject)一些 javascript 吗?

javascript - 使用网格 ID 隐藏剑道网格工具栏

node.js - 错误: Request body larger than maxBodyLength limit when sending base64 post request Axios

node.js - Node.js 中的 NoSQL/MongoDB 风格查询引擎

javascript - 如何循环遍历mysql数据库中的消息并正确显示它们

java - 如何让 Morphia 将字段的值设置为函数调用的返回值?