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 также относится к горному стандартному времени, которое Аризона использует круглый год.