Я хочу конвертировать дату с часового пояса 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
Вы должны использовать действующий часовой пояс. Вместо использования 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"));
date()
чтобы создать строку для «now», которую вы затем передаете datetime, которая использовала бы «now» ANYWAYS для создания$date
. общая трата циклов процессора.