2011-06-21 93 views
1

根據PHP,格式爲Etc/GMT+(offset)的時區爲valid timezone。在此基礎上,我會假設這個代碼將輸出一系列不同timezomes的:Etc/GMT +(偏移量)僅提供GMT的PHP

$start_date = 'Dec 16, 2011'; 
$start_time = '09:45:00'; 
#$utime_zone = 'GMT'; <-- switching to GMT works! 
$utime_zone = 'Etc/GMT'; 

for($i = -12; $i <= 12; $i++){ 
    $curr = ($i >= 0)?'+'.$i: $i; 
    $str = ($start_date . " " . $start_time . " " . $utime_zone.$curr); 
    echo $str . ' = ' . strtotime($str).PHP_EOL; 
} 

不幸的是,來電的strtotime都完全無視時區。

輸出:
Dec 16, 2011 09:45:00 Etc/GMT-12 = 1324028700
Dec 16, 2011 09:45:00 Etc/GMT-11 = 1324028700
Dec 16, 2011 09:45:00 Etc/GMT-10 = 1324028700
...you get the idea.

顯然,我已經就這一些假設,但有一個簡單的方法來從Etc/GMT+(offset)轉換爲格林威治時間?

+1

有手冊頁上一大警告:警告 請不要使用任何這裏(除了UTC)中列出的時區,他們只存在向後兼容的原因。 – mkilmanas

+0

@mkilmanas不幸的是,這不是我的控制 – cwallenpoole

回答

2

我不知道爲什麼不工作你的情況(除了形成大PHP警告說,不要使用方法),但你可以很容易地使用ISO-8601 date formatting

格式基本上是Y-m-d\TH:i:s,然後解決它UTC的Z+/-hh:mm

$datetime = '2011-06-20T18:49:00'; 
echo $datetime.'+01:00 => '.strtotime($datetime.'+01:00')."<br />"; 
echo $datetime.'+03:00 => '.strtotime($datetime.'+03:00')."<br />"; 

給你

2011-06-20T18:49:00+01:00 => 1308592140 
2011-06-20T18:49:00+03:00 => 1308584940 
相關問題