2009-01-31 3 views
1

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

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

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

ответ

0

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

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

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

1

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

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

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

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

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

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

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, у него есть поддержка часового пояса для встроенных datetimes.

Смежные вопросы