Дата, возвращающая разные значения, если включено время при использовании часовых поясов - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь получить местное время в различных часовых поясах для процесса часов - например, сейчас в Великобритании это 09.07 28 декабря.

Я создал две функции, чтобы помочь с этим:

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 голосов
/ 28 декабря 2018

Причина, по которой результаты отличаются, заключается в том, что даты в функциях отличаются.Когда вы делаете date('Y-m-d') время установлено в полночь.Однако, когда вы делаете date("Y-m-d H:i:s");, время устанавливается равным фактическому времени дня.Если вы сделаете это:

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

внутри каждой функции, перед установкой часового пояса вы получите следующие результаты:

2018-12-28 00:00:00
2018-12-28 10:26:50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...