我尝试将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
时区
答案 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
时区的符号相反。啊。详情here和here。
如果这让您感到不舒服,可以添加自己的时区:
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;