ทำไม Javascript จึงใช้วันและเดือนต่างกัน?


42

ฉันสังเกตเห็นว่าใน JavaScript เมื่อสร้าง a Dateเดือนจะเป็นศูนย์และไม่ได้เป็นวัน

ตัวอย่างเช่น:

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

ผลิต 1 กุมภาพันธ์ 2012

ทำไมนี้


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

คำตอบ:


50

น่าจะเป็นความคิดที่ว่าเดือนที่คิดว่าเป็นดัชนีในอาร์เรย์ของชื่อเดือนในขณะที่วันที่เป็นเพียง "นับ"


21
ที่นี่สมเหตุสมผลจากคำตอบของจุดยืนมันเป็นเรื่องบ้าค้างคาวที่คิดว่าตรรกะนี้ได้รับมานานแล้วและฉันไม่เคยถามมันมาก่อน
rlemon

2
@rlemon ความจริงที่ว่าคุณไม่เคยถามว่าตรรกะก่อนเพียงพิสูจน์ให้เห็นว่ามันทำให้รู้สึก :)
dasblinkenlight

14
FWIW ฉันไม่เคยคิดว่ามันสมเหตุสมผลมาก การประมวลผลวันที่ใน JavaScript เป็นสิ่งที่ทำให้ฉันตัวสั่นเพราะฉันมักจะลืมสิ่งต่าง ๆ เช่นนี้ไปเรื่อย ๆ จนกว่าฉันจะเริ่มแก้ไขข้อผิดพลาด
FrustratedWithFormsDesigner

2
FWIW ฉันไม่ใช่นักพัฒนาส่วนหน้าและไม่ต้องจัดการกับวันที่ในจาวาสคริปต์นอกเหนือจากโอกาสnew Date().getTime()
rlemon

20
เมื่อพูดถึง Javascript "นี่คือเหตุผลว่าทำไมพวกเขาถึงทำ" และ "สิ่งนี้สมเหตุสมผล" เป็นสองสิ่งที่คุณไม่ค่อยได้ยินด้วยกัน
Tridus

14

อาจเป็นได้ว่าวันที่ของ Javascript นั้นหมายถึงการเลียนแบบวันที่ของ Java Java ได้ใช้เดือนตามศูนย์ตั้งแต่ต้น

JDK API v1.0.2: Date.getMonth ()


6
และจาวาสเป็คนั้นสะท้อนโครงสร้าง C tm ดูstackoverflow.com/questions/344380/…

35
นั่นไม่ได้หมายความว่า Java Date API เป็นตัวอย่างที่ดีของการออกแบบที่ดีชะมัด ;-)
Joachim Sauer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.