比较时区面临的问题

时间:2017-01-17 09:44:26

标签: php datetime timezone

我正在比较时区而不是按预期工作。

$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格式保存数据,需要在另一个timezone内进行比较,即Asia/Seoul,但我可能会以错误的方式进行比较。目前它给我一个像

这样的输出
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

一切都很好,但我需要得到的结果有点像

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

好的,我已经设法解决了我的答案,但其他答案太可以接受了。现在我使用额外的变量来比较datetime对象,如

$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'));
}