Di portal perusahaan salah satu pelanggan kami, beberapa pengguna di profil mereka tidak menampilkan tanggal lahir dengan benar - alih-alih hari yang diperlukan, yang sebelumnya ditampilkan. Pengembang kami menemukan bahwa alasan kesalahan ini tersembunyi jauh di dalam sejarah.
Pertama, tim memeriksa backend dan memastikan bahwa data masuk dengan benar. Kami menganalisis log interaksi browser pengguna dengan situs - ternyata bug tersebut hanya direproduksi di Safari pada perangkat Apple. Dan ketika pengguna mengatakan bahwa tanggal lahir ditampilkan dengan benar, mereka memasuki portal dari perangkat dan browser lain, misalnya, dari Google Chrome di komputer mereka.
Selanjutnya, tim mulai mengulang selama periode yang berbeda, secara bertahap memperpendek interval waktu untuk memahami tanggal mana bug kami dikaitkan. Ternyata masalahnya berkisar pada bulan Juni 1930 - di sinilah penghentian waktu terjadi, dan hanya di Safari. Mereka mulai mencari tahu apa yang istimewa pada 21 Juni 1930, dan mereka menggali bahwa pada hari itu di Uni Soviet, waktunya bergeser satu jam ke depan. Google Chrome menangani situasi ini dengan benar, tetapi Safari tidak.
Fitur lain dalam format variabel yang disampaikan kali ini. Format tersebut menghitung jumlah milidetik dari waktu nol - stempelnya pada 1 Januari 1970. Google Chrome memproses tanggal 21 Juni sebagai berikut: dari pukul 23.59 hingga 01.00 biayanya 1000 milidetik (yaitu 1 detik), yaitu, kali ini "menghilang". Safari, di sisi lain, percaya bahwa kali ini ada, karena tidak tahu bahwa jam itu diterjemahkan di Uni Soviet.
Tim telah melaporkan bug ini ke Apple Feedback Assistant dan sedang menunggu tanggapan. Dan portal akan menerima tambalannya sendiri dengan rilis berikutnya.
PS Selama penyelidikan, para pengembang memperhatikan fakta menarik lainnya. Pengguna memiliki fitur yang memungkinkan Anda untuk menampilkan di portal hanya hari dan bulan lahir tanpa tahun. Dan ternyata jika pengguna memilih pengaturan seperti itu, maka nilai "4 AD" ditransmisikan dari backend. Itu mungkin untuk menetapkan mengapa pencipta portal memilih tanggal ini hanya di bagian paling akhir.
Ternyata pada awalnya, satu ditetapkan sebagai nilai default paling sederhana. Tapi kemudian bug muncul dalam pencarian - tidak menemukan orang yang berulang tahun pada 29 Februari. Struktur penyimpanan waktu yang digunakan tidak memungkinkan untuk membuat instance dari 29 Februari di tahun non-kabisat. Oleh karena itu, tahun kabisat pertama di era kita ditentukan dalam kode, dan semuanya berhasil.