2013-05-31 33 views
1

是的,我知道有DateTimeZone::getTransitions()。但我對它的輸出感到困惑。我會想到的是列表如下:列出所有時區轉換指定時間跨度

2013-03-31 03:00:00 -> 2013-03-31 04:00:00 
2013-10-27 03:00:00 -> 2013-10-27 02:00:00 

更重要的是,我不知道爲什麼它返回有關$timestamp_begin信息。通常,用戶不會爲該參數傳遞轉換時間戳。

+0

什麼輸出方面,你感到困惑? –

+0

結果數組中有'time'。這應該是過渡發生的時間。可能'ts'打印在'UTC'上。 'offset'可能導致偏移。但是之前的偏移值是多少呢? –

+0

我想你必須看看前面的數組元素? –

回答

2

感謝來自佩卡웃幫助,我想出了下面的腳本:

date_default_timezone_set('America/Havana'); 
$transitions = (new DateTime)->getTimeZone()->getTransitions(
    strtotime('2013-01-01'), 
    strtotime('2013-12-31')); 
date_default_timezone_set('UTC'); 
for ($i = 1; $i < count($transitions); $i++) 
     printf("%s -> %s\n", 
      strftime("%F %T", 
       $transitions[$i]['ts'] + $transitions[$i - 1]['offset']), 
      strftime("%F %T", 
       $transitions[$i]['ts'] + $transitions[$i]['offset']));