PHP - конвертировать строковый формат часового пояса в смещение целого числа

Довольно просто:

PHP возвращает часовые пояса в следующем формате:

"America/Los_Angeles"

Я хочу преобразовать это в:

-7

Я нашел много кодов для его преобразования, вычисляя различия с помощью пользовательских функций... но как минималист, я не могу поверить, что нет более простого способа (возможно, функции datetime), чтобы получить значение сразу... кто-нибудь знает об этом?

2 ответа

Решение
$dateTimeZone = new DateTimeZone("America/Los_Angeles");
$date = new DateTime(null, $dateTimeZone);
echo $dateTimeZone->getOffset($date)/60/60;

демонстрация

PHP использует стандартные часовые пояса из базы данных часовых поясов IANA.

"Америка / Лос-Анджелес" не то же самое, что -7. -7 - это "смещение часового пояса", а не "часовой пояс". Прочитайте "Часовой пояс!= Смещение" в теге часового пояса вики.

Считают, что "America/Los_Angeles" представляет тихоокеанское время США, которое составляет всего -7 в течение тихоокеанского летнего времени (PDT). В остальное время года это стандартное тихоокеанское время (PST), которое составляет -8.

Код, указанный в ответе Джона, корректно предоставит вам смещение, которое часовой пояс использует для текущей даты и времени. Признайте, что значение будет меняться в зависимости от того, когда вы запустите код.

Кроме того, вы должны понимать, что хотя вы можете определить смещение для определенного часового пояса в любой конкретный момент, обратное неверно. Вы не можете рассматривать -7 как часовой пояс и ожидать, что кто-то сможет сказать, что это тихоокеанское летнее время. Учтите, что -7 также относится к горному стандартному времени, которое Аризона использует круглый год.

Другие вопросы по тегам