使用时区时,如果包含时间,则日期返回不同的值

时间:2018-12-28 09:15:07

标签: php datetime

我正在尝试获取各个时区的本地时间以进行时钟处理-例如,现在在英国,现在是12月28日的09.07。

我创建了两个函数来帮助解决这个问题:

function dateLocal($timezone='Europe/London') {
    $date = date("Y-m-d");
    $given = new DateTime($date, new DateTimeZone("UTC"));
    $given->setTimezone(new DateTimeZone($timezone));
    $output = $given->format("Y-m-d");
    return $output;
}

function dateTimeLocal($timezone='Europe/London') {
    $datetime=date("Y-m-d H:i:s");
    $given = new DateTime($datetime, new DateTimeZone("UTC"));
    $given->setTimezone(new DateTimeZone($timezone));
    $output = $given->format("Y-m-d H:i:s");
    return $output;
}

我以檀香山为例,因为测试的日期是“昨天”。

如果只有日期,它就可以正常工作:

echo dateLocal("Pacific/Honolulu");
2018-12-27

但是,如果我想返回日期和时间,则会错误地返回:

wcho dateTimeLocal("Pacific/Honolulu");
2018-12-28 00:07:23

我希望它会返回:

2018-12-27 23:07:23

为什么它们返回不同的值?

1 个答案:

答案 0 :(得分:1)

结果不同的原因是函数中的日期不同。当您执行\\n时,时间将设置为午夜。但是,当您执行date('Y-m-d')时,时间将设置为实际的实际时间。如果您这样做:

date("Y-m-d H:i:s");

在每个功能中,在设置时区之前,您将获得如下结果:

echo $given->format('Y-m-d H:i:s');