2011-06-21 7 views
1

にGMTを提供GMT +は、(オフセット)、フォーマットEtc/GMT+(offset)でタイムゾーンはvalid timezoneあります。その上で、私が持っているでしょう。このコードは、出力が異なるtimezomes一連のだろうと想定していますは、/ etcのみPHPによる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)からGMTのタイムスタンプに変換する簡単な方法はありますか?

+1

を与える: 警告(UTC以外に)ここに記載されているタイムゾーンのいずれかを使用していない、彼らは唯一の後方互換性の理由のために存在してください。 。 – mkilmanas

+0

@mkilmanas残念ながら、これは私のコントロールではありませんでした – cwallenpoole

答えて

2

あなたのケースが動作しない理由を私は(離れて、そのメソッドを使用しないように言って、大きなPHPの警告を形成する)知らないが、あなたは簡単にフォーマットは基本的にY-m-d\TH:i:s、その後でISO-8601 date formatting

を使用して、それを回避することができ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