Bug Tanggal Tua

Bayu Hendra Winata
Javan Cipta Solusi
Published in
2 min readNov 3, 2021
Photo by Waldemar Brandt on Unsplash

Salah satu fungsi yang tersedia di Laravolt adalah form()->selectMonth() . Fungsi ini bertugas menghasilkan dropdown dengan opsi nama-nama bulan dalam setahun: January, February, March, dan seterusnya.

Tapi, pada tanggal 29 Oktober 2021 ada salah seorang programmer Javan yang melaporkan bug, dengan tampilan yang dihasilkan seperti berikut:

Bug tanggal 29 Oktober

Wow, ini sebuah bug yang sangat terang benderang, kenapa baru sekarang ada yang melapor ya? Sudah ada puluhan proyek yang memakai Laravolt, tidak mungkin bug senampak ini tidak ketahuan. Proyeknya pun sudah berjalan cukup lama, tidak mungkin tim QA proyek kelewatan hal secerah ini.

Beberapa waktu sebelumnya, tepatnya tanggal 31 Agustus 2021, ada laporan bug yang serupa. Kali ini di komponen yang lain, datepicker, tapi bug-nya sama: bulan Maret muncul dua kali, sedangkan bulan Februari tidak ada.

Bug tanggal 31 Agustus

Setelah dilihat kodenya, ada kesamaan dari dua fungsi di atas. Secara sederhana, berikut ini adalah kode untuk menghasilkan nama-nama bulan dalam setahun.

Fokusnya pada pemanggilan fungsi Carbon::createFromFormat('m', $monthIndex.

Kita terbiasa memanggil Carbon::createFromFormat('Y-m-d', '2021-01-01') untuk membuat object Carbon dengan tanggal tertentu. Karena saya cuma butuh bulan, maka ekspektasi memanggil Carbon::createFromFormat('m', $monthIndex) saja sudah cukup.

Dan sepertinya memang cukup. Saya sudah uji coba. Sudah dibikinkan unit test. Dan hasilnya sesuai ekspektasi.

Lalu dimana salahnya?

Salahnya adalah, fitur itu diimplementasi di tanggal muda, sedangkan bug-bug yang ditemukan selalu kejadian di tanggal tua, tepatnya antara tanggal 29 sampai 31. Harusnya fitur tanggal muda juga dites di tanggal muda ^_^

Ga ding.

Salahnya adalah memanggil Carbon::createFromFormat hanya dengan parameter bulan saja.

Lalu apa solusinya?

Hardcode tahun dan tanggal menjadi awal bulan agar tanggal selalu valid.

Carbon::createFromDate(2020, $monthIndex, 1)->translatedFormat('F');

Apakah rekan-rekan punya solusi yang lebih baik untuk meng-generate nama-nama bulan dengan Carbon? Tuliskan di komentar ya!

--

--