我想在任何给定时刻确定00:00到00:59之间的UTC偏移量。有没有一种简洁的方法来获得这个值,而不需要手动迭代偏移量?也许通过从UTC的当前时间转换?
00:00
00:59
13z8s7eq1#
使用DateTime和DateTimeZone 1可以创建一个有用的函数:
DateTime
DateTimeZone
/* 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:
G
00
False
->listIdentifiers()
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 )
1条答案
按热度按时间13z8s7eq1#
使用
DateTime
和DateTimeZone
1可以创建一个有用的函数:G
为24小时,不带前导零,因此在00
处为False
。->listIdentifiers()
返回所有已定义时区标识符的列表。然后,这样称呼它2:
您将获得3:
而且,这样称呼它2:
您将获得:
备注:
1.测试时间为13:43 UTC/GMT。
1.您要求输入“UTC偏移量”,但此定义并不精确:可以有多个时区具有相同的小时:所以函数返回一个数组。