как конвертировать дату и время из UTC в UTC + 01 (также в Азии / Калькутте) в PHP

1

Я хочу конвертировать дату с часового пояса UTC в любой часовой пояс, например UTC + 01, а также, например, имя часового пояса, например, Asia/Calcutta.

Как я могу это сделать?

Вот мой код

<?php
date_default_timezone_set("UTC");
$date = new DateTime(date("Y-m-d H:i:s"));
$date->setTimezone(new DateTimeZone('UTC+01')); 
echo $date->format('Y-m-d H:i:s'); 
?>

Я получаю следующую ошибку:

Fatal error: Uncaught exception 'Exception' with message 'DateTimeZone::__construct(): Unknown or bad timezone (UTC+01)' in /var/www/html/test/index.php:6 Stack trace: #0 /var/www/html/test/index.php(6): DateTimeZone->__construct('UTC+01') #1 {main} thrown in /var/www/html/test/index.php on line 6 
  • 0
    stackoverflow.com/questions/3792066/...
  • 3
    RTFM : php.net/manual/en/timezones.php имя вашего часового пояса не является одним из действительных / распознанных. И ваш код довольно бессмысленный. используйте old date() чтобы создать строку для «now», которую вы затем передаете datetime, которая использовала бы «now» ANYWAYS для создания $date . общая трата циклов процессора.
Показать ещё 6 комментариев
Теги:
datetime
timezone

1 ответ

4
Лучший ответ

Вы должны использовать действующий часовой пояс. Вместо использования UTC+1 (что недействительно) вы можете использовать CET (центральноевропейское время) или Europe/Berlin (оба зависят от лета/зимы), есть также страны, в которых этот часовой пояс действует в течение всего года (UTC + 1:00), для Калькутты вы можете использовать Asia/Calcutta

Примеры:

  • $date->setTimezone( new DateTimeZone( 'Asia/Calcutta' ) );
  • $date->setTimezone( new DateTimeZone( 'CET' ) );
  • $date->setTimezone( new DateTimeZone( 'Europe/Berlin' ) );

Здесь, в документах, вы можете найти список с действительными значениями DateTimeZone.

Обновление: как упоминалось в комментарии от @Marc B. и @deceze, вы можете просто использовать

$date = new DateTime();

Вместо того, чтобы использовать

$date = new DateTime(date("Y-m-d H:i:s"));
  • 0
    Как вы говорите, что UTC + 1 для Европы / Берлина и GMT + 5: 30 для Азии / Калькутты. Есть ли какая-нибудь функция, которая может преобразовать часовой пояс со смещением, например UTC + 01 и GMT + 5: 30, во временное имя?
  • 1
    @ErFaiyazAlam: Неправильно было сказать, что UTC + 1 - это Европа / Берлин, это только половина правды из-за летнего и зимнего времени. И я не знаю встроенной функции, которая бы возвращала вам имя часового пояса только из-за заданного смещения. Я думаю, что это практически невозможно . Например, => UTC + 8 будет правильным для 8 разных названий часовых поясов, так как выбрать правильное? Существует функция для получения имени часового пояса, но это только часовой пояс из вашего скрипта или сервера.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню