Mengapa Javascript memperlakukan hari dan bulan secara berbeda?

42

Saya perhatikan bahwa di JavaScript, saat membuat Date, bulan berbasis nol, dan hari tidak.

Sebagai contoh:

var foo = new Date(2012, 1, 1)

menghasilkan 1 Februari 2012

Kenapa ini?

surfitscrollit
sumber
6
months = ['Jan', 'Feb',..., 'Nov', 'Dec']; month = months[date.getMonth()];
zzzzBov

Jawaban:

50

Kemungkinan besar idenya adalah, bahwa bulan dianggap sebagai indeks ke dalam array nama bulan, sementara hari hanya "dihitung".

thorsten müller
sumber
21
Di mana ini masuk akal dari sudut pandang jawaban, itu gila untuk berpikir logika ini telah ada untuk berapa lama sekarang dan saya tidak pernah mempertanyakannya sebelumnya.
rlemon
2
@rlemon Fakta bahwa Anda belum pernah mempertanyakan logika itu sebelumnya hanya membuktikan bahwa itu masuk akal :)
dasblinkenlight
14
FWIW, saya tidak pernah berpikir itu masuk akal. Memproses tanggal dalam JavaScript selalu menjadi sesuatu yang membuat saya bergidik, karena saya biasanya melupakan hal-hal seperti ini sampai saya mulai men-debug hasil yang aneh.
FrustratedWithFormsDesigner
2
FWIW, saya bukan pengembang front-end dan tidak sering harus berurusan dengan tanggal dalam Javascript selain dari sesekalinew Date().getTime()
rlemon
20
Ketika datang ke Javascript, "ini sebabnya mereka melakukannya" dan "ini masuk akal" adalah dua hal yang jarang Anda dengar bersama.
Tridus
14

Mungkin juga tanggal Javascript dimaksudkan untuk meniru tanggal java. Java juga menggunakan bulan berbasis nol sejak awal.

JDK API v1.0.2: Date.getMonth ()

Danny Kirchmeier
sumber
6
Dan spec java mencerminkan struktur Cm. Lihat juga stackoverflow.com/questions/344380/…
35
Itu bukan untuk mengatakan bahwa Java Date API adalah contoh yang sangat baik dari desain yang baik ;-)
Joachim Sauer