UTCdate/时间string到时区

如何将UTC的date/时间string(例如2011-01-01 15:00:00)转换为任何给定的时区php支持,如America / New_York或Europe / San_Marino。

PHP的DateTime对象非常灵活。

 $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'); 

PHP的DateTime对象非常灵活。

由于用户需要多个时区选项,因此您可以将其设置为通用的。

generics函数

 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不包含在string中,那么:

 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); 

通用规范化函数将任何时区的任何时间戳格式化为其他时区。 从关系数据库的不同时区存储用户的date时间戳非常有用。 对于数据库比较,将时间戳存储为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;