Проблемы с UTC, не знаю, как их исправить (PHP / MySQL) - PullRequest
0 голосов
/ 18 июня 2009

Я вижу дату и время в формате UTC во всех моих полях даты / времени на моем сервере, я проследил все это до установки часового пояса на моем веб-сервере, который был в UTC времени ... мой вопрос, как я могу сделать их в у местных пользователей дата и время? Все время хранится в UTC на сервере MySQL.

У меня есть пользователи Город, Регион (Пров. / Штат) и Страна. В худшем случае я хочу отображать дату и время в часовом поясе PHP по умолчанию.

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 18 июня 2009

Вы можете использовать эту функцию и передать в качестве адреса местоположение пользователя "Перт, Вашингтон, Австралия".

Вместо возврата 0 в случае сбоя вы можете получить смещение между часовым поясом сервера и часовым поясом php по умолчанию.

Возможно, вы захотите сохранить это в переменной сеанса и вызывать функцию только в том случае, если переменная пуста, что повысит скорость отображения вашей страницы.

/**
 * This function finds the geocode of any given place using the geocoding service of yahoo
 * @example getGeoCode("White House, Washington");
 * @example getGeoCode("Machu Pichu");
 * @example getGeoCode("Dhaka");
 * @example getGeoCode("Hollywood");
 *
 * @param   string address - something you could type into Yahoo Maps and get a valid result
 * @return  int timeZoneOffset - the number of seconds difference between the user's timezone and your server's timezone, 0 if it fails.
 */
function getTimeZoneOffset($address) {
    $_url = 'http://api.local.yahoo.com/MapsService/V1/geocode';
    $_url .= sprintf('?appid=%s&location=%s',"phpclasses",rawurlencode($address));
    $_result = false;
    if($_result = file_get_contents($_url)) {
        preg_match('!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U', $_result, $_match);
        $lng = $_match[2];
        $lat = $_match[1];

        $url = "http://ws.geonames.org/timezone?lat={$lat}&lng={$lng}";
        $timedata = file_get_contents($url);
        $sxml = simplexml_load_string($timedata);
        $timeZoneOffset = strtotime($sxml->timezone->time) - time();
        return $timeZoneOffset;
    }
    else
    return 0;
}

Код, адаптированный с Time Engine , класс LGPL php.

0 голосов
/ 18 июня 2009

В MySQL вы можете использовать функцию CONVERT_TZ для преобразования всех дат в текущий часовой пояс при выборе данных из БД. В другом потоке stackoverflow обсуждается , как конвертировать часовые пояса с использованием класса DateTime в PHP 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...