2 minutes
Mengapa getMonth Dimulai Dari Nol
The Problem
Jadi, saya mau bikin option
dalam select
otomatis selected
sesuai dengan bulan saat ini (Februari).
<label for="bulan">Bulan</label><br>
<select name="bulan" id="input-bulan">
<option value="Januari" data-bulan="1">Januari</option>
<option value="Februari" data-bulan="2">Februari</option>
<option value="Maret" data-bulan="3">Maret</option>
<option value="April" data-bulan="4">April</option>
<option value="Mei" data-bulan="5">Mei</option>
<option value="Juni" data-bulan="6">Juni</option>
<option value="Juli" data-bulan="7">Juli</option>
<option value="Agustus" data-bulan="8">Agustus</option>
<option value="September" data-bulan="9">September</option>
<option value="Oktober" data-bulan="10">Oktober</option>
<option value="November" data-bulan="11">November</option>
<option value="Desember" data-bulan="12">Desember</option>
</select><br><br>
Saya pake itu attribute data-bulan
biar gampil diambil pake JQuery.
const month = date.getMonth();
$("#input-bulan option").each(function(){
if ($(this).data('bulan') == month) {
$(this).attr("selected", "selected");
}
});
Tapi eh tetapi, kok yang selected
Januari melulu?
saya coba itu variable month
di console.log()
console.log(month);
// 1
Sianjing, ternyata hasilnya 1
. Kok 1 sih? Kan kalau di PHP biasanya nomor bulan itu kalau Februari ya 02
.
Lalu, saya search di duckduckgo
kenapa getMonth
pada bulan Februari itu hasilnya 1
. Maka saya dapat link ke tautan stackoverflow ini.
Mari saya terjemahkan jawaban dari Bang SomeShinyObject yang cukup masuk akal.
Mengapa getMonth pada Javascript dimulai dari 0
Terjemahan atas jawaban SomeShinyObject terhadap pertanyaan dari PrimeLens yang bisa dilihat pada tautan berikut
Saya berasumsi itu karena akan lebih mudah untuk memberi referensi dalam susunan nama array
. Contoh
var months = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"];
var d = new Date();
var namedMonth = months[d.getMonth()];
Apabila getMonth()
mengembalikan nilai 1-12
, maka programmer harus melakukan d.getMonth()-1
setiap kali ingin memiliku nama bulan yang keren.
Hari-hari dalam bulan tidak memiliki “nama” yang spesifik. getDate()
returns 1-(28-31)
. Kita biasanya hanya merujuk hari dengan nomor saja.
Konsep yang sama seperti getMonth
juga diterapkan pada getDay()
, yang mengembalikan nilai 0-6
berdasarkan hari dalam satu minggu.
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var namedDay = days[d.getDay()];
Maka, semua bisa dirangkum dalam hal seperti ini:
console.log("Month: month[" + d.getMonth() + "]: " + namedMonth);
//Month: month[3]: April
console.log("Day: days[" + d.getDay() + "]: " + namedDay);
// Day: days[4] : Thursday
The Solution
Setelah saya baca itu jawaban si Bang SomeShinyObject, ya udah karena males ganti nomor-nomor dalam data-bulan
, saya giniin aja:
const month = date.getMonth()+1;
Dan, voila!
Semua berjalan sesuai rencana. Bulan Februari selected
dengan otomatis.
Kalau kamu suka tulisan saya, boleh kok traktir saya kopi. Tinggal klik di sini.