【问题标题】:Convert date in JS from one timezone to another将 JS 中的日期从一个时区转换为另一个时区
【发布时间】:2020-04-08 23:47:07
【问题描述】:

我想将具有特定时区的特定日期字符串转换为另一种格式的另一个时区。这是一个例子:

var date = '2020-04-09 17:10:57'; //Date in YYYY-MM-DD HH:MM:SS format
var timezone = 'America/New_York'; //Timezone of the given var date

现在我想将时区中的这个日期转换为另一个日期,例如我有:

var convert_to_timezone = 'Europe/Berlin';

我只知道如何获取当前用户的日期,但我不知道如何将这个日期与这个时区准确地转换为另一个日期。我也想尊重夏令时。

输出应该是:

//2020-04-09 23:10:57

在此先感谢,您真的会帮我解答,因为我尝试了 2 个小时但没有得到它:(

【问题讨论】:

  • 这需要在vanilla js中完成吗?或者你会考虑使用像moment.github.io/luxon 这样的库吗?
  • @WillD vanilla js 会很好,但如果没有别的办法,我也会用图书馆来做。我已经搜索了一些图书馆,但找不到任何好的东西,完全按照我的意愿去做。
  • @WillD 我已经看到了这个主题,但我的问题是,我只是看到如何将用户时区中的日期转换为另一个。但我不知道,如何将带有特定格式的时间戳的字符串与时区转换为另一个字符串。

标签: javascript date timezone


【解决方案1】:

我认为使用moment timezone 更容易且不那么冗长。

var newYork = moment.tz("2020-04-09 17:10:57", "America/New_York");
var berlin = newYork.clone().tz("Europe/Berlin");
console.log(berlin.format())
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.28/moment-timezone-with-data.min.js"></script>

这是example

【讨论】:

  • 谢谢,我会试一试,让你知道。但我必须下载什么?我必须每x年下载一次新的吗?或者当我在没有数据的情况下下载它时它会起作用吗?
  • 只使用full 版本
  • @bewikec973 你还需要moment js library。顺序是momentjs,然后是momentjs timezone。就像我在答案中提供的示例链接一样。
  • 啊,是的,我明白了。我稍后会测试它,因为它在“欧洲/柏林”的时间很晚;)
  • 如果对您有帮助,请点赞并接受我的回答
【解决方案2】:

Luxon 是对 Moment 的现代重写。如果你朝那个方向走,这里的工作代码:

var DateTime = luxon.DateTime;

var date = '2020-04-09 17:10:57';
var timezone = 'America/New_York';
var format = 'yyyy-MM-dd HH:mm:ss';

var luxonTime = DateTime.fromFormat(date, format, {zone: timezone});

var berlinTime = luxonTime.setZone('Europe/Berlin').toFormat(format);

console.log(berlinTime);
&lt;script src="https://cdn.jsdelivr.net/npm/luxon@1.23.0/build/global/luxon.min.js"&gt;&lt;/script&gt;

关于 Luxon 和 Moment 的区别:https://github.com/moment/luxon/blob/master/docs/why.md

【讨论】:

  • 解析器好点,我将编辑解决方案。回复 PS:您知道执行此操作的香草 js 方法吗?特别是管理夏令时(对于纽约市)以及其他基于区域设置的规则是否存在于等式的柏林方面?
  • 没有。我相信 Luxon 严重依赖 Intl.DateTimeFormat object,它不进行解析。时区转移输出没问题,但我不知道 Luxon 如何利用它进行解析(尽管我也没有看过)。所以你可以看看 Luxon 的内部结构。
  • @RobG - Luxon 有自己的字符串解析器,它“滥用”国际 API 来建立时区信息缓存。这不是微不足道的,但有效。艾萨克在那里做了非常了不起的工作。 :)
猜你喜欢
  • 2015-02-21
  • 2017-02-08
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2011-03-11
  • 2011-04-23
  • 2020-07-22
相关资源
最近更新 更多