【问题标题】:Converting between timezones without affecting the actual time?在不影响实际时间的情况下在时区之间转换?
【发布时间】:2017-02-03 02:32:51
【问题描述】:

我正在尝试存储和检索一个日期对象,无论浏览器设置为哪个时区,该对象都应该在保存时保持一致。

例如。我有一个晚上 7 点的 IST,当使用偏移量转换时,它应该返回到我选择的时区的晚上 7 点。 然后,我希望能够检索与浏览器所在时区的下午 7 点相同的时间戳。

我已经弄清楚了第一部分

var date = moment(date);
var localDate = date.clone();
localDate.tz(timezone); // continent/city from momentjs
localDate.tz(timezone);
localDate.add(date.utcOffset() - localDate.utcOffset(), 'minutes');
localDate.toDate();

这最终给了我日期,我可以用它作为 UTC 保存到数据库中(我将它保存在 mongodb 中)

我不确定如何将其反转回本地时区,以便我可以将返回值作为浏览器时区的晚上 7 点。

【问题讨论】:

  • 以 UTC 格式保存日期后,您将不再拥有源偏移量。因此,要将其转换回目标时区的同一时间,您需要捕获源偏移量,以便将其转换回源偏移量时间,然后抵消与目标时区的差异。顺便说一句,当时区规则改变或有夏令时的区域时,在不同时区具有相同时间可能会导致歧义。
  • ECMAScript Date 对象是UTC,它是具有偏移量的主机。如果您在特定时区有晚上 7 点并将时区更改为具有不同偏移量的时区,则时间应该更改。否则它代表一个不同的时刻。

标签: javascript mongodb date datetime momentjs


【解决方案1】:

在保存到 db 之前将日期转换为 UTC 格式

moment.utc()

每当您检索从 UTC 转换为本地时间时。

moment.utc(utcDateTime, utcDateTimeFormat).local().format(specifiedFormat)

【讨论】:

  • 对不起,我需要将日期作为日期对象存储在 mongodb 中。
  • 我已经更新了答案。让我知道这是否能解决您的目的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多