Как вы обрабатываете разницу часовых поясов в PHP? - PullRequest
4 голосов
/ 29 ноября 2010

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

2 голосов
/ 29 ноября 2010

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

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

1 голос
/ 08 января 2013
date('Z');

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

0 голосов
/ 01 декабря 2010

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

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

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

0 голосов
/ 29 ноября 2010

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

<?php echo date('g:i a', strtotime("now + 10 hours 30 minutes")); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...