У меня есть веб-сайт, который загружает данные в таблицу MySQL. Две записи в таблице — «дата начала» и «дата окончания». «дата начала» устанавливается автоматически с использованием CURRENT_TIMESTAMP. «конечная дата» выбирается пользователем с помощью средства выбора даты.
Это создает проблему, если пользователь находится в другом часовом поясе, чем сервер. Например (я в Тихоокеанском часовом поясе, сервер в Центральном). Если я создам запись в 17:00 и выберу дату окончания 22:00, она попадет в базу данных как 19:00 и 22:00, создав трехчасовое окно вместо 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 в стандартное время.
timestamp
, то все должно быть в порядке. Просто укажите правильный часовой пояс клиента в начале сеанса mysql. - person zerkms   schedule 31.08.2011timestamp
и преобразуйте в определенный часовой пояс на этапе вывода. - person zerkms   schedule 31.08.2011timestamp
в формате UTC и конвертирует из/в часовой пояс пользователя. Поэтому не имеет значения, какое местное время пользователя - если вы указали правильный часовой пояс пользователя - в поле будет храниться действительное время UTC. - person zerkms   schedule 31.08.2011set time_zone = '-7:00'; insert into mydb.mytable ('startdate', 'enddate') values (current_timestamp, '2011-08-31 11:48:00);
и записи в базе данных оказались 13:48:15 и 11:48:00. Они не совпадают. - person user617123   schedule 31.08.2011