我不是php专家。我知道PHP支持时区。
对于PHP支持的给定时区TZ,我需要检索偏移量(即要添加或减去的小时和分钟数),以获取在TZ区域中的时间,这是已知的UTC(即GMT + 0)。
我如何实现这一点?最终,我需要获取PHP中所有受支持时区的这些偏移量。谢谢。
我不是php专家。我知道PHP支持时区。
对于PHP支持的给定时区TZ,我需要检索偏移量(即要添加或减去的小时和分钟数),以获取在TZ区域中的时间,这是已知的UTC(即GMT + 0)。
我如何实现这一点?最终,我需要获取PHP中所有受支持时区的这些偏移量。谢谢。
这将有助于将偏移值转换为GMT格式,无需任何计算。
<?php
//target time zone
$target_time_zone = new DateTimeZone('America/Los_Angeles');
//find kolkata time
$date_time = new DateTime('now', $target_time_zone);
//get the exact GMT format
echo 'GMT '.$date_time->format('P');
以下是一个简单的示例,如何获取时区偏移量(以秒为单位):
$dtz = new DateTimeZone('Europe/Sofia');
$time_in_sofia = new DateTime('now', $dtz);
echo $dtz->getOffset( $time_in_sofia );
以GMT+x格式显示:
$offset = $dtz->getOffset( $time_in_sofia ) / 3600;
echo "GMT" . ($offset < 0 ? $offset : "+".$offset);
function getStandardOffsetUTC($timezone)
{
if($timezone == 'UTC') {
return '';
} else {
$timezone = new DateTimeZone($timezone);
$transitions = $timezone->getTransitions(time() - 86400*365, time());
foreach ($transitions as $transition)
{
if ($transition['isdst'])
{
continue;
}
return sprintf('UTC %+03d:%02u', $transition['offset'] / 3600, abs($transition['offset']) % 3600 / 60);
}
return false;
}
}
使用方法:
echo getStandardOffsetUTC('Europe/Sofia'); // UTC +02:00
只需以下单行代码即可实现。
echo (new DateTime('now', new DateTimeZone( 'Asia/Kabul' )))->format('P');
PHP支持的所有时区:
$timezone_offsets = array();
foreach(timezone_identifiers_list() as $timezone_identifier)
{
$date_time_zone = new DateTimeZone($timezone_identifier);
$date_time = new DateTime('now', $date_time_zone);
$timezone_offsets[$timezone_identifier] = $date_time_zone->getOffset($date_time);
}
print_r($timezone_offsets);