Преобразование строки часового пояса в смещение UTC с использованием PHP - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть магазин WordPress Marketplace, где «автор» продукта имеет часовой пояс, сохраненный в usermeta в строковом формате, то есть Americas/Chicago.

Я хочу вывести часовой пояс каждого пользователя с UTCсмещение вместо строки, чтобы я мог более легко манипулировать им.Я получил этот пример ниже из другого вопроса переполнения стека, но он не работает в моей ситуации.

$timezone = 'America/New_York'; //example string although I am getting the timezone from the database based on each users settings

if(!empty($timezone)) {
    $UTC = new DateTimeZone("UTC");
    $newTZ = new DateTimeZone($timezone);
    $date = new DateTime( $newTZ );
    $date->setTimezone( $UTC);
    echo $date->format('H:i:s');
}

Однако этот код ломает страницу.Не могу понять, почему это будет ломать страницу.Я поместил его в отдельную функцию, и он все еще ломается, и журнал ошибок тоже мало чем помогает.

В журнале написано:

DateTime->__construct(Object(DateTimeZone))

1 Ответ

0 голосов
/ 31 декабря 2018

Сообщение об ошибке довольно ясно:

Неустранимая ошибка: Uncaught TypeError: DateTime :: __ construct () ожидает, что параметр 1 будет строкой, объект задан

часовой пояс равен секунда параметр для DateTime.Поэтому, если вы хотите работать с «сейчас», либо передайте «сейчас», либо null в качестве первого параметра.

$timezone = 'America/New_York'; //example string although I am getting the timezone from the database based on each users settings

if(!empty($timezone)) {
    $UTC = new DateTimeZone("UTC");
    $newTZ = new DateTimeZone($timezone);
    $date = new DateTime(null, $newTZ );
    $date->setTimezone( $UTC);
    echo $date->format('H:i:s');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...