2017-01-17 6 views
0

タイムゾーンを比較していて、期待通りに動作しません。タイムゾーンを比較する問題

$input_start_time = DateTime::createFromFormat('Y-m-d H:i:s','2017-01-17 08:00:00'); 
$input_start_time->setTimezone(new DateTimeZone("UTC")); 

$input_end_time = DateTime::createFromFormat('Y-m-d H:i:s','2017-01-17 20:00:00'); 
$input_end_time->setTimezone(new DateTimeZone("UTC")); 

$current_date = new DateTime("Asia/Seoul"); 

print_r($input_start_time); 
print_r($input_end_time); 
print_r($current_date); 

while($input_start_time <= $input_end_time) 
{ 
    if($input_start_time <= $current_date) 
    { 
     echo $input_start_time->format('h:i A').PHP_EOL; 
    } 
    $input_start_time->add(new DateInterval('PT30M')); 
} 

私はUTCフォーマット内のデータを保存し、Asia/Seoulすなわち別のtimezone以内にそれを比較する必要がありますが、私はそれはそう間違った方法でそれをやっているかもしれませんよこっち。現在、それは私のすべては大丈夫ですが、私はやや

07:00 AM 
07:30 AM 
08:00 AM 
08:30 AM 
09:00 AM 
..... 
06:00 PM 
06:30 PM 

として間違っている私はこちらにやっている?のような結果を取得する必要が

DateTime Object 
(
    [date] => 2017-01-17 07:00:00.000000 
    [timezone_type] => 3 
    [timezone] => UTC 
) 
DateTime Object 
(
    [date] => 2017-01-17 19:00:00.000000 
    [timezone_type] => 3 
    [timezone] => UTC 
) 
DateTime Object 
(
    [date] => 2017-01-17 18:19:03.000000 
    [timezone_type] => 3 
    [timezone] => Asia/Seoul 
) 
07:00 AM 
07:30 AM 
08:00 AM 
08:30 AM 
09:00 AM 

としてのような出力を提供しますか

答えて

0

[OK]私は自分の答えを解決することができましたが、他の答えはあまりにも受け入れられます。今の私は、のようなオブジェクトを比較するために余分な変数を使用しています

$input_start_time = DateTime::createFromFormat('Y-m-d H:i:s','2017-01-17 08:00:00'); 
$input_start_time->setTimezone(new DateTimeZone("UTC")); 

$input_end_time = DateTime::createFromFormat('Y-m-d H:i:s','2017-01-17 20:00:00'); 
$input_end_time->setTimezone(new DateTimeZone("UTC")); 

$current_date_timezone = new DateTime("Asia/Seoul"); 
$current_data = new DateTime($current_date_timezone->format('Y-m-d H:i:s')); // get the `Asia/Seoul` current time within UTC and comparing this object 

while($input_start_time <= $input_end_time) 
{ 
    if($input_start_time <= $current_date) 
    { 
     echo $input_start_time->format('h:i A').PHP_EOL; 
    } 
    $input_start_time->add(new DateInterval('PT30M')); 
}