Задать вопрос
@Dealaxer

PHP Как вывести часовой пояс GMT — или +?

Приветствую всех.

Зная часовой пояс, ну например в таком формате: "America/Los_Angeles", как вывести в переменную данные типа: "GMT-10", причем необходимо точно знать зона - или +.

Долго бьюсь, не знаю что применить.

Есть ли метод? Или для этого нужны сложные манипуляции?

Заранее благодарю.
  • Вопрос задан
  • 3585 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
toxa82
@toxa82
echo date('O'); // +0300
echo date('P'); // +03:00

есть еще смещение в секундах date('Z'), но выводится без знака +. Можно использовать sprintf для форматирования например:
echo sprintf('GMT%+d', date('Z') / 3600); // GMT+3
P.S. Последний вариант не совсем верный, т.к. он показывает целые числа, хотя есть страны у которых GMT отличается на полчаса/четверь. Например, Австралия (UTC+10:30 — остров Лорд-Хау) и Новая Зеландия (UTC+12:45 — Архипелаг Чатем) и много других. Так что предпочительней и правильней юзать date('O') или date('P').
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Dealaxer Автор вопроса
Решение:
1)
$dtz = new DateTimeZone('America/Los_Angeles');
$zona = new DateTime('now', $dtz);
$offset = $dtz->getOffset($zona) / 3600;
echo "GMT" . ($offset < 0 ? $offset : "+".$offset);


2)
$target_time_zone = new DateTimeZone('America/Los_Angeles');
$date_time = new DateTime('now', $target_time_zone);
echo 'GMT '.$date_time->format('P');


Только, слишком громоздкие они, нету ли что-то однострочного?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы