понимание результатов global.time_zone - PullRequest
1 голос
/ 01 февраля 2009

Я ищу способы изменения часового пояса моих баз данных, поскольку моя база пользователей основана на Великобритании, но мой домен основан на США. Я исследовал несколько вариантов, включая php, PEAR time class и функции MySQL. Для меня самое простое (в основном потому, что оно начинается и заканчивается MySQL) включает изменение параметра time_zone в MySQL.

Готовясь к этому, я только что попробовал вызов MySQL @@ global.time_zone (как будто я лучше пойму это, прежде чем начать играть с ним). Он генерирует целую загрузку параметров, которых я не ожидал, и сайт MySQL ( текст ссылки ) не упоминается - это, очевидно, массив, он возвращает множество распознаваемых параметров, таких как протоколы входа и т. Д., Но я не вижу никаких очевидных параметров, которые возвращают что-либо, связанное с часовыми поясами.

У вас есть опыт? Вы можете посоветовать? Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 06 ноября 2009

Есть 2 ключа для работы с часовыми поясами:

  1. Храните все свои дату / время в одном часовом поясе (может быть в любом часовом поясе, но использование UTC действительно упрощает вещи.)

  2. Решите, где в вашем приложении будут конвертироваться дата / время в / из часового пояса хранения в пользовательский часовой пояс отображения. Это можно сделать на уровне абстракции базы данных, в коде приложения или в шаблонах страниц (в основном, в любой части стека MVC). Важно быть последовательным.

Также помните, что php имеет собственную настройку часового пояса, независимую от MySQL. Если вы используете php> 5.1, вы можете изменить часовой пояс php во время выполнения, используя date_set_default_timezone ().

Если вы решите выполнить преобразование часового пояса при получении / хранении информации в базе данных, функция convert_tz () MySQL станет вашим новым лучшим другом.

Для меня было проще всего выполнить преобразование часовых поясов как часть шаблонов страниц. Дата / время сохраняются в базе данных в часовом поясе UTC, а вся логика приложения также в UTC. При выводе даты в HTML я использую функцию-обертку для php date () для вывода даты в часовом поясе пользователя:

function getTimezoneOffset($time, $timezone)
{       
    $t = new DateTime(date('Y-m-d H:i:s', $time));  
    $tz = new DateTimeZone($timezone);  
    $t->setTimeZone($tz);   
    return $t->getOffset();
}
function myDate($timezone, $format, $timestamp=false)
{
    if (!$timestamp) $timestamp = time();
    return date($format, $timestamp+getTimezoneOffset($timestamp, $timezone));
}

Аналогичным образом, при получении ввода от пользователя через формы сначала выполните преобразование часового пояса, чтобы ваше приложение работало с датой / временем UTC.

Другим вариантом является использование PostgreSQL - в отличие от MySQL он имеет встроенную поддержку часовых поясов.

0 голосов
/ 22 февраля 2009

Стандартная практика - хранить любую дату / время, которые вы хотите отобразить в UTC (т.е. по Гринвичу), и либо автоматически извлекать часовой пояс из клиента пользователя, используя JavaScript, либо спрашивая пользователя, где он живет.

Лично я не одобряю автоматический метод, поскольку у многих пользователей не установлен правильный часовой пояс. Но может быть полезно предложить им значение по умолчанию.

В любом случае, если у вас есть часовой пояс пользователя, просто добавьте его к временным меткам, хранящимся в UTC в базе данных, прежде чем отобразить его.

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