Более эффективный способ получить смещение UTC для указанного часового пояса (например, -21600 для США / Центрального региона)

Есть ли более эффективный способ преобразования строк часового пояса, таких как US/Central в -21600 чем следующее? Возможно тот, который не требует загрузки и DateTimes и сравнения?

echo getUtcOffset('America/Chicago');  // returns -21600
echo getUtcOffset('America/New_York'); // returns -18000
echo getUtcOffset('Indian/Mauritius'); // returns 14400
echo getUtcOffset('Europe/London');    // returns 0
function getUtcOffset($tz) {
$utc_dtz = new DateTimeZone('UTC');
$remote_dtz = new DateTimeZone($tz);
$utc_dt = new DateTime("now", $utc_dtz);
$remote_dt = new DateTime("now", $remote_dtz);
$offset = $remote_dtz->getOffset($remote_dt) - $utc_dtz->getOffset($utc_dt);
return $offset;
}

2

Решение

Это должно быть так просто:

DateTime::getOffset

Возвращает смещение часового пояса.

Возвращает смещение часового пояса в секундах от UTC в случае успеха или FALSE в случае
отказ.

function getUtcOffset1($tz) {
$datetime = new DateTime("now", new DateTimeZone($tz));
return $datetime->getOffset();
}
echo getUtcOffset1('America/Chicago');  // returns -21600
echo getUtcOffset1('America/New_York'); // returns -18000
echo getUtcOffset1('Indian/Mauritius'); // returns 14400
2

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

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

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