PHP синхронизирует проблему перехода на летнее время - PullRequest
0 голосов
/ 31 августа 2011

У меня есть сайт, который загружает данные в таблицу MySQL.Две записи в таблице - это «дата начала» и «дата окончания».'startdate' автоматически с использованием CURRENT_TIMESTAMP.'enddate' выбирается пользователем с помощью средства выбора даты.

Это создает проблему, если пользователь находится в другом часовом поясе, чем сервер.Например (я нахожусь в Тихоокеанском часовом поясе, сервер в Центральном).Если я создаю запись в 17:00 и выбираю дату окончания в 22:00, она попадает в базу данных как 7:00 и 22:00, создавая 3-часовое окно вместо 5. Я хочу преобразовать дату окончания в центральное время (то же самое).как сервер).Итак, используя мой пример, я бы хотел, чтобы записи в базе данных были 7 вечера и 12 часов ночи.

Я могу получить смещение часового пояса пользователя с помощью этого javascript:

var d = new Date();
var timezone = -d.getTimezoneOffset()/60;

Это возвращает -7 (я в GMT-8, я предполагаю, что разница в 1 час связана с переходом на летнее время).Моя первая мысль о решении - предположить, что сервер находится в -5, и сравнить два (возвращаясь к моему примеру, -5 - -7 = 2, поэтому добавьте 2 к «конечной дате»).

Проблема возникает, когда мы переключаемся на стандартное время.Я предполагаю, что мой javascript начнет возвращать -8 вместо -7, нарушая мою функцию.Я знаю о PHP date_default_timezone_get (), но это возвращает строку вместо числа.Полагаю, мне нужна похожая функция, которая (для центрального времени) возвращает -5 при переходе на летнее время и -6 в стандартное время.

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Используйте поле отметки времени mysql.

Или сохраните все данные в формате UTC, а затем выполните то, что необходимо сделать после в php.

0 голосов
/ 31 августа 2011

Использование MySQL UTC_TIMESTAMP вместо CURRENT_TIMESTAMP, преобразует 'startdate' во время UTC. Мой код JavaScript:

var d = new Date();
var timezone = -d.getTimezoneOffset()/60;

Может использоваться для преобразования времени окончания в UTC. Теперь все в UTC и совпадает.

...