如果您在PHP中从此列表中获得时区标识符,则很容易将给定的GMT日期转换为本地时间:http://www.php.net/manual/en/timezones.php
例如,你可以这样做(其中$ fromTimeZone只是'GMT',$ toTimeZone只是该列表中的一个常量(即'America / Chicago'),$ datetime是GMT日期):< / p>
public static function convertToTimezone($datetime, $fromTimeZone, $toTimeZone, $format = 'Y-m-d H:i')
{
// Construct a new DateTime object from the given time, set in the original timezone
$convertedDateTime = new DateTime($datetime, timezone_open($fromTimeZone));
// Convert the published date to the new timezone
$convertedDateTime->setTimezone(timezone_open($toTimeZone));
// Return the udpated date in the format given
return $convertedDateTime->format($format);
}
但是,如果只给出时区偏移量,我就有问题将相同的GMT日期转换为当地时间。例如,我没有给出'America / Chicago',而是给了-0500(这是该时区的等价偏移量)。
我尝试了以下内容(其中$ datetime是我的GMT日期,$ toTimeZone是偏移量(在这种情况下为-0500)):
date($format, strtotime($datetime . ' ' . $toTimeZone))
我知道所有date()函数都基于服务器的时区。我似乎无法忽略它并使用明确给出的时区偏移量。
答案 0 :(得分:0)
您可以将特定偏移量转换为DateTimeZone:
$offset = '-0500';
$isDST = 1; // Daylight Saving 1 - on, 0 - off
$timezoneName = timezone_name_from_abbr('', intval($offset, 10) * 36, $isDST);
$timezone = new DateTimeZone($timezoneName);
然后你可以在DateTime构造函数中使用它,例如
$datetime = new DateTime('2012-04-21 01:13:30', $timezone);
或使用setter:
$datetime->setTimezone($timezone);
在后一种情况下,如果使用不同的时区构建$datetime
,则日期/时间将转换为指定的时区。