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

时间:2017-03-24 08:10:54

标签: javascript datetime momentjs

我尝试将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

正如您所看到的,片刻会增加2小时UTC,但Europe/Warsaw位于UTC+1时区

1 个答案:

答案 0 :(得分:2)

  

正如您所看到的,片刻会增加2小时UTC,但Europe/Warsaw位于UTC+1时区

不是3月28日。 3月28日,它的UTC + 2,因为夏令时,starts on March 26th in Warsaw并持续到10月29日。

  

好的,其他问题:如何让它跳过夏令时?

使用Etc/GMT-1时区。是的,真的-1。这显然是可怕和错误的,但显然,tz数据库中的GMT + 1(!!!)(由[但不受Moment-Timezone控制])使用该符号因为一些POSIX约定。 Etc/GMT时区的符号相反。啊。详情herehere

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

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

示例:



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>
&#13;
&#13;
&#13;