【问题标题】:Convert & display UTC format of mongodb to EST format in javascript在javascript中将mongodb的UTC格式转换为EST格式并显示
【发布时间】:2016-07-16 17:01:11
【问题描述】:

当我在 mongodb 中插入日期时间时,它是 UTC 格式

ISODate("2016-03-29T07:53:02.847Z")

当我获取这个结果时,它在 IST 中

2016 年 3 月 29 日星期二 13:23:02 GMT+0530 (IST)

我想将其转换为 EST 并显示(仅日期和时间)

2016 年 3 月 29 日星期二 02:56:22 GMT-0400 (EDT)

2016 年 3 月 29 日星期二 02:56:22(最终输出

我已经尝试过 node-timemoment js 等。做了很多研究但没有结果。 任何帮助/建议都非常感谢.

【问题讨论】:

  • 你不应该。以 UTC 存储是一种很好的做法。这样,每个 时区都有一致的数据视图。时区是“客户端”问题,而不是数据库问题。
  • 您可以将 GMT 偏移存储在另一个字段中,以保留此信息。 Sqlserver 具有用于此确切目的的数据类型。不幸的是 mongo,而大多数其他数据库都没有。
  • 它不保存在本地,它保存在UTC。您可能会混淆 console.log(document) 之类的输出,它将日期“字符串化”为本地值。这就是 JavaScript Date 对象的 .toString() 方法在起作用。您也可以在 new Date().toString() 中执行此操作,而不是 new Date(),其中一个显示“本地字符串”,另一个显示它实际上是 UTC 日期。
  • 对不起。我写错了。它以 UTC 格式保存,但在获取时会将 UTC 转换为 IST。如何 ?为什么 ?另外,您在之前的评论中没有回答我的第二个问题。 @BlakesSeven

标签: javascript mongodb datetime timezone


【解决方案1】:

Moment.js 在 node.js 中工作,并且支持时区,可以从 UTC 转换为任何所需的时区:http://momentjs.com/timezone/

var moment = require('moment-timezone');
var jun = moment("2014-06-01T12:00:00Z");
jun.tz('America/New_York').format('ddd MMM DD YYYY HH:mm:ss');

你需要先 npm install moment timezone

npm install moment-timezone --save

【讨论】:

  • 你能帮我写一段示例代码吗??
  • 谢谢我明白了 :) 但是有什么办法我可以使用 mongodb 聚合而不是像这样来做同样的事情吗?哪一个会更有效 - 获取所有记录,然后在查询时转换 OR 只转换它??
  • 您可以将范围的开始日期和结束日期从 EST 转换为 UTC,然后使用结果日期运行查询
  • 谢谢。非常感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多