На корпоративном портале одного из наших клиентов у некоторых пользователей в профиле неправильно отображалась дата рождения — вместо необходимого дня был указан предыдущий день.
Наши разработчики обнаружили, что причина этой ошибки скрыта глубоко в истории.
Сначала команда проверила серверную часть и убедилась, что данные поступают правильно.
Мы проанализировали логи взаимодействия браузеров пользователей с сайтом — оказалось, что ошибка воспроизводится только в Safari на устройствах Apple. А когда пользователи говорят, что дата рождения отображается правильно, они заходят на портал с другого устройства и браузера, например Google Chrome на компьютере.
Далее команда начала перебирать разные периоды, постепенно сокращая временные промежутки, чтобы понять, с какой датой связан наш баг.
Оказалось, что проблема вращается примерно в июне 1930 года — именно здесь происходит сбой времени, и только в Safari. Стали разбираться дальше, что особенного произошло 21 июня 1930 года, и обнаружили, что в этот день в Советском Союзе передвинули время на час вперед. Google Chrome правильно справляется с этой ситуацией, а Safari — нет. Еще одной особенностью является переменный формат, передающий это время.
Формат отсчитывает количество миллисекунд от нулевого времени — отметка 1 января 1970 года.
Google Chrome обрабатывает дату 21 июня следующим образом: с 23:59 до 1 ночи стоит 1000 миллисекунд (что равно 1 секунде), это означает, что это время «исчезло».
Сафари считает, что это время есть, так как не знает, что в СССР меняли часы.
Команда сообщила об этой ошибке в Apple Feedback Assistant и ожидает ответа.
А со следующим релизом портал получит собственный патч.
P.S. В ходе расследования разработчики обратили внимание на еще один интересный факт. У пользователей есть функция, позволяющая отображать на портале только день и месяц рождения без года.
И оказалось, что если пользователь выбирает эту настройку, то из бэкенда передается значение «4 AD».
Установить, почему создатели портала выбрали именно эту дату, удалось только в самом конце.
Оказалось, что сначала в качестве самого простого значения по умолчанию было установлено одно.
Но тут в поиске появился баг — он не нашел людей с днями рождения 29 февраля.
Используемая структура хранения времени не позволяет создать экземпляр с 29 февраля в невисокосный год. Поэтому в код прописали первый високосный год нашей эры, и всё заработало.
Теги: #Разработка мобильных приложений #Разработка веб-сайтов #Safari #синхронизация времени #разработка корпоративного портала
-
Поддержка Принтеров Apple От Экспертов
19 Oct, 24 -
Безопасен Ли Ваш Беспроводной Интернет?
19 Oct, 24 -
Отношения Классов — От Uml К Коду
19 Oct, 24 -
Скачать Мастер На Мобильный
19 Oct, 24