Как мне получить смещение UTC в настоящее время в полночь?

Я хотел бы в любой момент определить, какое смещение UTC находится между часами 00:00 в 00:59,

Есть ли краткий способ получить это, не прибегая к ручной итерации по смещению? Возможно, с помощью конвертации из текущего времени UTC?

-1

Решение

С помощью DateTime а также DateTimeZone1 Вы можете создать полезную функцию:

/*
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
)

phpFiddle demo 4


Заметки:

  1. PHP TimeZone имеет некоторые ошибки (сообщается в TimeDiff, но я предупреждаю вас), когда оригинальный DateTime не в формате UTC. Итак, проверьте поведение функции, прежде чем использовать ее в производстве.
  2. Проверено в 13:43 UTC / GMT.
  3. Вы запрашиваете «смещение UTC», но это определение не является точным: может быть несколько часовых поясов с одним и тем же часом, поэтому функция возвращает массив.
  4. В разделе «Часовые пояса», вы можете нажать на каждую строку, чтобы перейти к соответствующей zeitverschiebung.net стр. Обратите внимание, что иногда смещение UTC на сайте отличается от смещения php UTC: в проверенные мною даты смещение php UTC является правильным.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]