getMonth ใน javascript ให้เดือนก่อนหน้า


150

ฉันใช้ datepicker ซึ่งให้วันที่ในรูปแบบอา. 7 ก.ค. 00:00:00 EDT 2013 แม้ว่าเดือนนั้นจะบอกว่ากรกฎาคม แต่ถ้าฉันทำ getMonth มันจะให้ข้อมูลของเดือนก่อนหน้า

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");
d1.getMonth());//gives 6 instead of 7

ผมทำอะไรผิดหรือเปล่า?


18
อ๋อ ... มันเป็นศูนย์จัดทำดัชนี
ทูต

2
อย่าคิดมากกับวันที่ในจาวาสคริปต์ ใช้ Moment.js ถ้าทำได้
Valamas

7
ฉันไม่อยากจะเชื่อเลยว่ามันเป็นเรื่องจริงแค่ไหน
neaumusic

Moment.js ไม่สามารถสร้าง dateDiffs ได้อย่างถูกต้อง ไม่เป็นไรถ้าคุณทำ dateDiff ภายในเดือนเดียวกัน แต่พยายามทำใน 2 เดือนที่ต่างกัน (เช่น 27-04-2018 และ 24-05-2018) และมันก็หมดวัน
rozza

1
รอจนกว่าจะได้ลองgetYear()!! ;-)
James Poulose

คำตอบ:


290

เพราะgetmonth ()เริ่มจาก 0 คุณอาจต้องการที่d1.getMonth() + 1จะบรรลุสิ่งที่คุณต้องการ


222
ฉันต้องบอกว่าการมีดัชนีเลขเดือนเป็นศูนย์เป็นสิ่งที่โง่ที่สุดที่ฉันเคยเห็นมาระยะหนึ่ง '
LarryBud

8
ทำไมบางคนถึงต้องการให้เป็น 0 ตามถ้า getDate ให้ 1-31?
Abhinav Gauniyal

6
ส่วนใหญ่คุณจะต้องทำd1.getMonth() < 12 ? d1.getMonth() + 1 : 1- ไม่งั้นธันวาคมจะเป็น 13 ไม่ใช่เหรอ?
DanielKhan

9
@DanielKhan Nope เนื่องจากเดือนธันวาคมจะเป็นวันที่ 11 ดังนั้นการเพิ่ม 1 เข้าไปจะทำให้เป็น 12 ได้อย่างถูกต้องฟังก์ชัน getMonth () ไม่ควรส่งคืนค่าที่สูงกว่า 11.
unenthusiasticuser

8
@LarryBud เหตุผลน่าจะตรงกันข้ามกับส่วนอื่น ๆ ของวันที่ (วันเดือนปีชั่วโมงนาทีวินาที ... ) ซึ่งมักใช้เป็นตัวเลขตามที่เป็นอยู่เดือนมักจะถูกแปลงเป็นข้อความโดยใช้ อาร์เรย์ของชื่อซึ่งแน่นอนว่าอิงตาม 0 เป็นกรณีของไลบรารีมาตรฐาน C ซึ่งต้องมีอายุมากกว่า 40 ปี
jcaron

22

getMonth()ฟังก์ชันเป็นศูนย์ตามดัชนี คุณต้องทำd1.getMonth() + 1

เมื่อเร็ว ๆ นี้ฉันใช้ไลบรารีMoment.jsและไม่เคยมองย้อนกลับไป ลองมัน!


คุณสามารถพูดได้ว่าคุณใช้อย่างไร?
Muhammed YILMAZ

14

สมมติว่าคุณใช้ตัวแปรของคุณ

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");

เดือนต้องการ +1 จึงจะแม่นยำเริ่มนับที่ 0

d1.getMonth() + 1 // month 

ในทางตรงกันข้าม .... วิธีการเหล่านี้ไม่จำเป็นต้องมีการบวก 1

d1.getSeconds()   // seconds 
d1.getMinutes()   // minutes 
d1.getDate()      // date    

และสังเกตว่ามัน.getDate()ไม่ใช่getDay()

d1.getDay()       // day of the week as a 

หวังว่านี่จะช่วยได้

ฉันสงสัยว่าวิธีการเหล่านี้ขาดความสอดคล้องเนื่องจากเหตุผลทางประวัติศาสตร์


1
const d = new Date();
const time = d.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', second:'numeric', hour12: true });
const date = d.toLocaleString('en-US', { day: 'numeric', month: 'numeric', year:'numeric' });

หรือ

const full_date = new Date().toLocaleDateString(); //Date String
const full_time = new Date().toLocaleTimeString(); // Time String

เอาต์พุต

วันที่ = 8/13/2020

เวลา = 12:06:13 AM

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