[Разработка веб-сайтов, Safari, Разработка мобильных приложений] Как баг с потерянными днями рождения привёл нас в историю СССР

Автор Сообщение
news_bot ®

Стаж: 6 лет 2 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
25-Май-2021 19:31

На корпоративном портале одного нашего заказчика у некоторых пользователей в их профиле неправильно отображалась дата рождения – вместо необходимого дня показывался предыдущий. Наши разработчики выяснили, что причина этой ошибки скрывалась глубоко в истории.
Сначала команда проверила бэкенд и убедилась, что данные приходят корректно. Проанализировали логи взаимодействия пользовательских браузеров с сайтом – выяснилось, что баг воспроизводится только в Safari на устройствах Apple. А когда пользователи говорят, что дата рождения отображается правильно, они заходят на портал с другого устройства и браузера, например, с Google Chrome на компьютере.Далее, команда стала перебирать разные периоды, постепенно сокращая временные отрезки, чтобы понять, с какой датой связан наш баг. Выяснилось, что проблема крутится вокруг июня 1930 года – именно там происходит сбой по времени, причем только в Safari. Стали разбираться дальше, что особенного произошло 21 июня 1930 года, и откопали, что в этот день в Советском Союзе перевели время на час вперёд. Google Chrome обрабатывает эту ситуацию корректно, а Safari – нет.Еще одна особенность в формате переменной, которая передает это время. Формат отсчитывает количество миллисекунд от нулевого времени – отметка стоит на 1 января 1970 года. Google Chrome обрабатывает дату 21 июня следующим образом: с 23:59 до часа ночи стоит 1000 миллисекунд (что равно 1 секунде), то есть это время «пропадает». Safari же считает, что это время там есть, так как не знает, что в СССР переводили часы. Команда зарепортила этот баг в Apple Feedback Assistant и ожидает ответа. А портал получит собственную заплатку со следующим релизом.P.S. В процессе расследования разработчики обратили внимание ещё на один интересный факт. У пользователей есть фича, которая позволяет отображать на портале только день и месяц рождения без года. И оказалось, что если пользователь выбирает такую настройку, то с бэкенда передаётся значение «4 год нашей эры». Установить, почему создатели портала выбрали эту дату, удалось только в самом финале.Оказалось, что сначала выставлялась единица как самое простое значение по умолчанию. Но тогда появился баг в поиске – он не находил людей с днями рождения 29 февраля. Создать инстанс с 29 февраля в невисокосном году не позволяет используемая структура хранения времени. Поэтому в коде прописали первый в нашей эре високосный год, и все заработало.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_razrabotka_vebsajtov (Разработка веб-сайтов), #_safari, #_razrabotka_mobilnyh_prilozhenij (Разработка мобильных приложений), #_safari, #_razrabotka_korporativnyh_portalov (разработка корпоративных порталов), #_sinhronizatsija_vremeni (синхронизация времени), #_razrabotka_vebsajtov (
Разработка веб-сайтов
)
, #_safari, #_razrabotka_mobilnyh_prilozhenij (
Разработка мобильных приложений
)
Профиль  ЛС 
Показать сообщения:     

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

Текущее время: 29-Апр 06:52
Часовой пояс: UTC + 5