Перейти к контенту
  • 0

Календарь: Событие в 0:01 показывается как 21:01 накануне


Вопрос

Описание:

Ввожу в календарь однодневное событие 22 марта в 0 часов 01 минуту. Временная зона на форме GMT +3. Щелкаю на ОК, смотрю, как это событие отражается в календаре для пользователей. Оно показывается как 21 марта в 21 час 01 мин.

 

Настройки:

Админка - «Формат даты и времени»:

Часовой пояс сервера - GMT +3

Корректировка времени сервера (в минутах) - 0

Автоматический перевод часов - Да.

Версия IPB - 2.3.6 Rus

 

Настройки на сервере: временная зона сервера - MSK (GMT +3, автоматический переход на летнее время), время обновляется автоматически через ntpd.

 

Что делаю для диагностики.

 

1. Ввожу в календарь однодневное событие 22 марта без указания времени (событие длится весь день). Метка времени для него по логике должна быть установлена на первую секунду этих суток.

 

2. Смотрю в таблицу ibf_cal_events, поле event_unix_from:

 

Тестовое однодневное событие 22 марта - 1237680000

Тестовое событие в 0.01 мин. 22 марта - 1237669260 (на 10740 секунд, т.е. на 3 часа без одной минуты раньше)

 

Правильная полночь с 21 на 22 марта по Москве с учетом временной зоны +3 GMT - 1237669200.

 

Поле event_tz - 3 в обоих случаях.

 

Отчего возможна ошибка.

 

При вводе событий с указанием времени суток поле event_unix_from заполняется корректно, с учетом локальной временной зоны. Функция mktime, которая учитывает локальное время, дает на начало 22 марта по Москве 1237669200.

 

При вводе событий без указания времени суток поле event_unix_from заполняется некорректно, без учета локальной временной зоны. Функция gmmktime, которая считает время по Гриничу, дает на начало 22 марта на нулевом меридиане как раз 1237680000 - то число, которое мы и видим в таблице.

 

При выводе событий на странице календаря события снова некорректно пересчитываются по Гриничу, без учета временной зоны. Поэтому событие 22 марта в 0.01 минуту по московскому времени "съезжает" на предыдущую дату и показывается на странице календаря как событие 21 марта 21.01 мин.

 

Эта же проблема относится и к повторяющимся событиям: если событие не имеет указания на время суток, поле event_unix_from заполняется по Гриничу, если имеет - поле заполняется с учетом местного времени.

 

Резюме. :D

 

Если при вводе события в календарь пользователь поставил на форме галочку 'Если это событие не действует весь день, вы можете указать начальное время', то метка времени event_unix_from в таблицу вводится правильно, с учетом местного времени. Однако потом при выводе на странице календаря это событие может запросто "съехать" на предыдущую дату, т.к. страница формируется некорректно, без учета местного времени.

 

Если при вводе события в календарь пользователь не указал время, т.е. событие длится весь день, то метка времени event_unix_from в таблицу вводится некорректно, без учета временной зоны. Зато потом при выводе на странице календаря событие никогда никуда не съедет.

 

Вопрос к знатокам: как это лечить. ;)

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Коллеги! Ситуация с календарем в 2.3.6 еще хуже, чем я думал.

 

Что я делаю. Ввожу событие в календарь одно и то же событие в 2 часа ночи одного и того же дня и указываю разную временную зону.

 

Так вот, при временной зоне +3 событие на странице календаря показывается на 6 часов раньше - в 20.00 предыдущих суток!!

При временной зоне 0 - событие показывается на 3 часа раньше.

При временной зоне -3 - событие показывается на странице, как оно есть - в 2 часа ночи.

 

Смотрю, что пишется в таблицу ibf_cal_events в поле event_unix_from: как я и писал в предыдущем посте, туда заносится правильное значение временной метки Юникса, с учетом временной зоны. Все глюки относятся к выводу событий на страницу. Причем наблюдается какое-то шаманство. :D

 

Пробовал менять через админку время сервера - ни на что не влияет. ;)

 

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

 

Коллеги! Вы общаетесь с разработчиками - что известно на сей счет? Не может быть, чтобы этот баг никем не был замечен.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Вот, похоже, что происходит. Как я уже писал, события без указания времени суток заносятся в таблицу как полночь по Гриничу, а события с указанием времени суток заносятся Гринич - TZ. Т.е. пользователь, у которого в профиле указана временная зона Москва, будет заносить события, как если бы они произошли на 3 часа раньше.

 

Поэтому ГОСТЬ увидит событие сдвинутым на 3 часа назад. Но это не все - если входишь как ЗАРЕГИСТРИРОВАННЫЙ пользователь из Москвы, то событие показывается сдвинутым ЕЩЕ НА 3 ЧАСА НАЗАД. Итого 6 часов разницы!! Разработчики явно пытались собственную кривизну компенсировать и запутались окончательно.

 

Кстати, один из участников форума уже столкнулся с той же проблемой:

http://www.ibresource.ru/forums/index.php?showtopic=53875

 

===================================

 

Чем дальше в лес, тем толще партизаны. ;)

 

Скачал грядущую разрекламированную IPB 3.0 beta 2 (на beta 3 не обновилась, копать сейчас не вижу смысла).

 

Теперь они заносят события с указанием времени суток не как Гринич - TZ, а как Гринич + TZ!!!

 

Конкретный пример. Заношу событие 25 марта БЕЗ указания времени суток. event_unix_from вне зависимости от временной зоны пользователя и сервера - один и тот же, 1237939200. Это полночь с 24 на 25 марта. Теперь заношу событие С УКАЗАНИЕМ времени - 0:01 минута. Сразу же в таблице вижу скачок на 3 часа и 1 минуту вперед: 1237950060.

 

Это событие теперь выводится на страницу календаря как 25 марта 3 часа 01 минута, причем ВНЕ зависимости от установки временной зоны в профиле пользователя.

 

То есть если в версии 2.3 временную зону ОТНИМАЛИ, теперь ее ПРИБАВЛЯЮТ. :D Кто-нибудь имеет прямой выход на разработчиков??

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Та же самая проблемма всплыла и у нас на форуме, Форум поставили неделю назад, дошло дело до календаря и вот проблема-Календарь, все события вносимые в календарь отображаются на день раньше, но когда заходишь в событие в верхней строке прописана правильная дата .

Меняли время форума в настройках даты и времени не помогает, Может быть кто-то знает ответ как бороться с такой проблеммой, просмотрела все сообщения даноого форума на эту тему но ответа так и не нашла, только вопросы, Для нашего форума календарь одна из важнейших опций. Теперь получается не можем запускать пользователей до полного исправления ошибки.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.