MomentJS - 将日期时间从 UTC 转换为不同的时区

2024-02-05

我正在尝试将 utc 时间转换为本地时区,但没有成功。这是我的代码:

var utc = moment.tz('2017-03-28 15:00:00','UTC');
var s = utc.format();
var pl = moment.tz(utc.format(), 'Europe/Warsaw').format();
console.info(s);
console.info(pl);

输出是:

VM4496:4 2017-03-28T15:00:00Z
VM4496:5 2017-03-28T17:00:00+02:00

正如您所看到的,时刻比 UTC 增加了 2 个小时,但是Europe/Warsaw is in UTC+1时区


正如您所看到的,时刻比 UTC 增加了 2 个小时,但是Europe/Warsaw is in UTC+1时区

不是3月28日。 3 月 28 日,UTC+2,由于实行夏令时,3月26日在华沙开始 https://www.timeanddate.com/time/change/poland/warsaw并持续到10月29日。

好的,另一个问题:如何让它跳过夏令时?

使用Etc/GMT-1时区。是的,确实是-1。这是可怕和错误的,但显然,这是 tz 数据库中的 GMT+1(!!!)(由 Moment-Timezone 使用,但不受 Moment-Timezone 控制),由于某些 POSIX 约定,该数据库使用该表示法。这Etc/GMT时区的符号相反。啊。细节here https://github.com/moment/moment-timezone/issues/277 and here https://en.wikipedia.org/wiki/Tz_database#Area.

如果这让您感到不舒服,您可以添加自己的时区:

moment.tz.add([
    'Own/UTC+1|+01|10|0|'
]);

Example:

moment.tz.add([
  'Own/UTC+1|+01|-10|0|'
]);
var utc = moment.tz('2017-03-28 15:00:00','UTC');
var s = utc.format();
var plusOne = moment.tz(utc.format(), 'Etc/GMT-1').format();
var own = moment.tz(utc.format(), 'Own/UTC+1').format();
console.info(s);
console.info(plusOne);
console.info(own);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.11/moment-timezone-with-data-2010-2020.min.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MomentJS - 将日期时间从 UTC 转换为不同的时区 的相关文章