我想在任何特定时刻确定哪个UTC偏移在00:00
到00:59
之间。
有没有一种简洁的方法来获得这个而不需要手动迭代偏移量?也许是通过UTC当前时间的转换?
答案 0 :(得分:0)
使用DateTime
和DateTimeZone
1 ,您可以创建一个有用的功能:
/*
Return UTC Offsets/Timezones in which is 00AM at passed time string
@param string original time string (default: current time)
@param string original timezone string (default: UTC)
@param bool return as Timezones instead as UTC Offests (default: False)
@retval array array of UTC Offsets or Timezones
*/
function getMidNight( $timeString=Null, $timeZone=Null, $returnTimeZone=False )
{
$utc = new DateTimeZone( 'UTC' );
$baseTimeZone = ( $timeZone ) ? new DateTimeZone( $timeZone ) : $utc;
$date = new DateTime( $timeString, $baseTimeZone );
$retval = array();
foreach( DateTimeZone::listIdentifiers() as $tz )
{
$currentTimeZone = new DateTimeZone( $tz );
if( ! $date->setTimezone( $currentTimeZone )->format('G') )
{
if( $returnTimeZone ) $retval[] = $tz;
else $retval[] = $date->getOffset();
}
}
return array_unique( $retval );
}
G
格式为24小时,没有前导零,因此00
为False
。
->listIdentifiers()
返回所有已定义时区标识符的列表。
然后,以这种方式调用它 2 :
print_r( getMidNight() );
您将获得 3 :
Array
(
[0] => 46800
[1] => -39600
)
然后,以这种方式称呼 2 :
print_r( getMidNight( Null, Null, True ) );
您将获得:
Array
(
[0] => Antarctica/McMurdo
[1] => Pacific/Auckland
[2] => Pacific/Enderbury
[3] => Pacific/Fakaofo
[4] => Pacific/Midway
[5] => Pacific/Niue
[6] => Pacific/Pago_Pago
[7] => Pacific/Tongatapu
)