Как избавиться от часового пояса?
6863 сообщения
#13 лет назад
В абсолютно неожиданном месте столкнулась с проблемой, решение которой не могу найти уже несколько дней. Делается календарь событий. Работает только с датами. Время не указывается.
При создании новой записи происходит проверка, свободна ли эта дата.
И вот сюрприз. Как со стороны MySQL так и со стороны Javascript происходит поправка даты на часовой пояс, в результате сравнение дат по состоянию на 00.00 не дает правильный результат.
Помогите, пожалуйста, избавиться от часового пояса или хотя бы придумать рабочий костыль для сравнения дат.
Гугл как-то ничего не дает, нормальных людей волнует вопрос как работу с разными поясами наладить, а мне ее убить надо.
2989 сообщений
#13 лет назад
Что-то из этого не подойдет?javascript
x = new Date();
currentTimeZoneOffsetInHours = -x.getTimezoneOffset()/60; //в часах
mysql
SELECT @@global.time_zone, @@session.time_zone;
2817 сообщений
#13 лет назад
В сервера одно время, в пользователя другое. Вести календарь по времени на сервере, в пользователя не факт что правильная дата.
6863 сообщения
#13 лет назад
elosoft, по javascript может и подойдет. Но в целом это же идиотизм... дополнительные преобразования когда задача ПРОЩЕ... Текущая дата в задаче вообще не гребет. Крыжик поставили - в базу занеслось. Другой пользователь уже отметить тот же день не может. И вот такая мелочь (сравнение) не получается. Убица апстену..
В строках что ли вообще хранить его (varchar)?

450 сообщений
#13 лет назад
Т.е. вам нужно просто сравнить даты? А какой тип поля? Проверьте, может у вас там datetime какой-нибудь и в нём хранится время с точностью до секунды. Тогда две записи сделаные в один день но в разное время н ебудут равны 
3562 сообщения
2989 сообщений
#13 лет назад
Вообще, по моей практике, если где-то когда-то изначально вогнали ошибку в определении дат (передернули клиентское и серверное время), то единственный реальный способ это затащить в переменную javascript правильную дату (с сервера, mysql и т.п.) и каждый раз перед отправкой даты проверять ее. Нудно, но выполнимо.
6863 сообщения
#13 лет назад
Так текущая дата не имеет никакого значения. У меня +2, на сервере +3
Отправляю на сервер две даты: от и до. Уже строкой отправляю банально.
Скрипт тянет из базы даты забитые ранее.
Чтоб пройтись по диапазону, преобразует все в UnixTime. Вот тут подстава. Даты из базы все имеют время 01.00.00. А новые создаются со временем 00.00.00. И естественно, не сравниваются. Хотя казалось бы, все преобразования производятся на сервере?
450 сообщений
#13 лет назад
Цитата ("floppox"):Даты из базы все имеют время 01.00.00.
Дата - это только год, месяц и число, зачем вы храните ВРЕМЯ?

Цитата ("floppox"):
Чтоб пройтись по диапазону, преобразует все в UnixTime.
Можно на этой стадии просто отсекать часы, минуты и секунды и потом сравнивать
6863 сообщения
#13 лет назад
В том все дело, что ВРЕМЯ не хранится. Но именно при преобразовании в UnixTime к датам из базы какого-то лешего приплюсовывается один час.Короче, помогло привести все к строкам и потом в одном месте юникстайм получать. Вроде не слишком страшно получилось.
Но мне пожалуй в клуб глупых пора )))) Столько времени бодаться. Теперь думаю, че сразу так не сделала. Изначально в виде метки он передавалось и из базы и от клиента, потом запуталась, наверное, когда с типами экспериментировать начала.