Как вы обрабатываете разницу в часовом поясе в PHP?

Мне говорят, что этот ниже метод вычисления локального времени пользователя иногда не работает. Каков наилучший способ сделать это в PHP? Чем ты занимаешься?

public function getTimeOffset ($time) { $this->_cacheTimeOffset(); if ($this->timeOffsetExecuted) { $d = date("O"); $neg = 1; if (substr($d, 0, 1) == "-") { $neg = -1; $d = substr($d, 1); } $h = substr($d, 0, 2)*3600; $m = substr($d, 2)*60; return $time + ($neg * ($h + $m) * -1) + (($this->timeOffset + $this->getDstInUse()) * 3600); } return $time; } 

Используйте расширение DateTime, например DateTime :: getOffset ,
или DateTimeZone :: getOffset

Некоторые страны, возможно, выполнили несколько обновлений часового пояса,
этот метод DateTimeZone :: getTransitions показывает историю перехода

 date('Z'); 

возвращает смещение UTC в секундах.

Просто ответил на очень похожий вопрос. Я рекомендую вам проверить это; Я объяснил два предпочтительных способа вычисления смещения часового пояса (с использованием простой математики, а затем классов datetimezone и datetime ) довольно тщательно.

Первый способ был бы самым простым (и наиболее логичным) способом, и это сохранить их смещение (если у вас уже есть это), и умножить на 3600 (1 час в секундах), а затем добавить это значение в текущую временную метку unix, чтобы получить окончательное время работы.

Другой способ сделать это – использовать классы DateTime и DateTimeZone . Как работают эти два класса, как показано здесь , вы создаете два объекта DateTimeZone , один с вашим часовым поясом и один с их; создайте два объекта DateTime с первыми параметрами "now" а второй – ссылкой на объекты DateTimeZone выше (соответственно); а затем вызовите метод getOffset для объекта вашего часового пояса, передающего свой объект часового пояса в качестве первого параметра, в конечном счете получив смещение в секундах, которое можно добавить к текущей временной отметке unix, чтобы получить время, необходимое для выполнения их задания.

Быстрое решение:

 <?php echo date('g:i a', strtotime("now + 10 hours 30 minutes")); ?>