UTC Дата / Время Строка для часового пояса

Как конвертировать строку даты / времени (например, 2011-01-01 15:00:00), которая является UTC для любых поддерживаемых php-фраз, таких как America / New_York или Europe / San_Marino.

Объект DateTime PHP довольно гибкий.

 $UTC = new DateTimeZone("UTC"); $newTZ = new DateTimeZone("America/New_York"); $date = new DateTime( "2011-01-01 15:00:00", $UTC ); $date->setTimezone( $newTZ ); echo $date->format('Ymd H:i:s'); 

Объект DateTime PHP довольно гибкий.

Поскольку пользователь запросил более одного часового пояса, вы можете сделать его общим.

Общая функция

 function convertDateFromTimezone($date,$timezone,$timezone_to,$format){ $date = new DateTime($date,new DateTimeZone($timezone)); $date->setTimezone( new DateTimeZone($timezone_to) ); return $date->format($format); } 

Применение:

 echo convertDateFromTimezone('2011-04-21 13:14','UTC','America/New_York','Ymd H:i:s'); 

Вывод:

2011-04-21 09:14:00

Предполагая, что UTC не включен в строку, тогда:

 date_default_timezone_set('America/New_York'); $datestring = '2011-01-01 15:00:00'; //Pulled in from somewhere $date = date('Ymd H:i:s T',strtotime($datestring . ' UTC')); echo $date; //Should get '2011-01-01 10:00:00 EST' or something like that 

Или вы можете использовать объект DateTime.

 function _settimezone($time,$defaultzone,$newzone) { $date = new DateTime($time, new DateTimeZone($defaultzone)); $date->setTimezone(new DateTimeZone($newzone)); $result=$date->format('Ymd H:i:s'); return $result; } $defaultzone="UTC"; $newzone="America/New_York"; $time="2011-01-01 15:00:00"; $newtime=_settimezone($time,$defaultzone,$newzone); 

Функция нормализации общего назначения для форматирования любой временной метки из любого часового пояса в другой. Очень полезно для хранения datetimestamps пользователей из разных часовых поясов в реляционной базе данных. Для сравнения баз данных gmdate('Ymd H:i:s') метку времени как UTC и используйте с gmdate('Ymd H:i:s')

 /** * Convert Datetime from any given olsonzone to other. * @return datetime in user specified format */ function datetimeconv($datetime, $from, $to) { try { if ($from['localeFormat'] != 'Ymd H:i:s') { $datetime = DateTime::createFromFormat($from['localeFormat'], $datetime)->format('Ymd H:i:s'); } $datetime = new DateTime($datetime, new DateTimeZone($from['olsonZone'])); $datetime->setTimeZone(new DateTimeZone($to['olsonZone'])); return $datetime->format($to['localeFormat']); } catch (\Exception $e) { return null; } } 

Применение:

 $from = ['localeFormat' => "d/m/YH:i A", 'olsonZone' => 'Asia/Calcutta']; $to = ['localeFormat' => "Ymd H:i:s", 'olsonZone' => 'UTC']; datetimeconv("14/05/1986 10:45 PM", $from, $to); // returns "1986-05-14 17:15:00" 

Как насчет:

 $timezone = new DateTimeZone('UTC'); $date = new DateTime('2011-04-21 13:14', $timezone); echo $date->format;