Как вы обрабатываете разницу часовых поясов в 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;
}

4 ответа

Решение

Используйте расширение 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")); ?>
Другие вопросы по тегам