MySQL → Письмо веб-разработчика о проблемах времени
Проблема уже исправлена и как оказалось была довольно интересная. Я выявил, что в intranet-е нельзя было сохранить лишь два месяца — апрель и ноябрь. Все остальные месяцы успешно работали и сохранялись. Довольно странная ситуация, правда? Ведь все месяцы обрабатываются
одинаково и нет какого-то условия именно для этих двух месяцев. Немного поразмыслив, мы с Пашей предположили, что это проблема существует из-за… перевода времени и неккоретных настроек MySQL базы; Поскольку мы в админке выбираем только год и месяц (без точного времени), я присваиваю 00:00:00 часов первого дня выбраного месяца и года, тоесть самое-самое начало.
(Для програмистов: mktime(0,0,0,$month,1,$year))
В случае перевода времени, идет сдвиг на час, и таким образом мы получаем уже 23:59:00 31-ое марта в случае выбора апреля…
(Для програмистов: получившийся mktime я сохраняю в базу как
FROM_UNIXTIME(mktime))
Это предварительный анализ,теперь факты, относительно этого:
1) Не работает только на тех месяцах, перед которыми изменяется время (если в марте переводят часы — то в апреле, если в октябре переводят часы — то в ноябре)
2) Обнаружена ошибка только при записи в/из базы, обработка функции FROM_UNIXTIME MYSQL
3) На нашем локальном сервере этот же скрипт успешно работает с любыми месяцами — следовательно проблема именно в настройках MySQL базы.
Для более точного исследования необходимо дополнительное время и более глубинно изучить эту проблему с переводом времени, скажу только что я с таким сталкиваюсь впервые, когда компьютер неверно определяет свою же дату (фактически наблюдается де-синхронизация PHP timestamp с MySQL timestamp)
одинаково и нет какого-то условия именно для этих двух месяцев. Немного поразмыслив, мы с Пашей предположили, что это проблема существует из-за… перевода времени и неккоретных настроек MySQL базы; Поскольку мы в админке выбираем только год и месяц (без точного времени), я присваиваю 00:00:00 часов первого дня выбраного месяца и года, тоесть самое-самое начало.
(Для програмистов: mktime(0,0,0,$month,1,$year))
В случае перевода времени, идет сдвиг на час, и таким образом мы получаем уже 23:59:00 31-ое марта в случае выбора апреля…
(Для програмистов: получившийся mktime я сохраняю в базу как
FROM_UNIXTIME(mktime))
Это предварительный анализ,теперь факты, относительно этого:
1) Не работает только на тех месяцах, перед которыми изменяется время (если в марте переводят часы — то в апреле, если в октябре переводят часы — то в ноябре)
2) Обнаружена ошибка только при записи в/из базы, обработка функции FROM_UNIXTIME MYSQL
3) На нашем локальном сервере этот же скрипт успешно работает с любыми месяцами — следовательно проблема именно в настройках MySQL базы.
Для более точного исследования необходимо дополнительное время и более глубинно изучить эту проблему с переводом времени, скажу только что я с таким сталкиваюсь впервые, когда компьютер неверно определяет свою же дату (фактически наблюдается де-синхронизация PHP timestamp с MySQL timestamp)



