Мне говорят, что этот ниже метод вычисления локального времени пользователя иногда не работает. Каков наилучший способ сделать это в 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")); ?>