2017-03-24 162 views
0

我trygin UTC時間轉換爲本地時區與時刻,但沒有成功。這裏是我的代碼: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/WarsawUTC+1時區

回答

2

正如你可以看出,時刻增加了2個小時UTC,但Europe/WarsawUTC+1時區

不是3月28日。 3月28日,由於夏令時,這是UTC + 2,其中starts on March 26th in Warsaw和10月29日運行。

好的,還有其他問題:如何讓它跳過夏令時?

使用Etc/GMT-1時區。是的,真的-1。這是可怕的和錯誤的,但顯然,這是格林威治標準時間數據庫中的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>

+0

沒錯。在歐洲大部分地區,與美國不同,在3月的最後一個星期天凌晨3點,當地時間由標準時間轉換爲夏令時,由1小時提前至凌晨4點。 – yeoman

+0

好吧,還有其他問題:如何讓它跳過夏令時? – breq

+0

您需要使用中歐標準時間或中歐標準時間。 CEST/CENT(CEST更常見),而不是Centrel European Time。 '歐洲/華沙'可能不是獲取時區的最佳方式,但API當然有更高級的可能性? – yeoman