getMonth trong javascript cung cấp cho tháng trước


139

Tôi đang sử dụng một máy đo thời gian đưa ra một ngày theo định dạng Chủ nhật ngày 7 tháng 7 00:00:00 EDT 2013. Mặc dù tháng đó là tháng 7, nếu tôi thực hiện getMonth, nó sẽ cho tôi tháng trước.

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

Tôi đang làm gì sai?



2
Đừng mất trí với ngày trong javascript. Sử dụng Moment.js nếu bạn có thể
Valamas

6
tôi không thể tin được nó thực sự như thế nào
neaumusic

Moment.js không thể thực hiện dateDiff một cách chính xác. Sẽ ổn thôi nếu bạn thực hiện dateDiffs trong cùng một tháng, nhưng hãy thử thực hiện trong 2 tháng khác nhau (ví dụ: 27-04-2018 và 24-05-2018) và đó là một ngày nghỉ.
rozza

1
Đợi đến khi bạn thử getYear()!! ;-)
James Poulose

Câu trả lời:


264

Bởi vì getmonth () bắt đầu từ 0. Bạn có thể muốn phải d1.getMonth() + 1đạt được những gì bạn muốn.


193
Tôi phải nói rằng, để có một tháng số 0 được lập chỉ mục là điều ngu ngốc nhất tôi từng thấy trong một thời gian. '
LarryBud

5
tại sao ai đó muốn nó dựa trên 0 nếu getDate cho 1-31?
Abhinav Gauniyal

6
Hầu hết có lẽ bạn sẽ phải làm d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- nếu không thì tháng 12 sẽ là 13, phải không?
DanielKhan

7
@DanielKhan Không, bởi vì tháng 12 sẽ là 11, vì vậy, thêm 1 vào nó sẽ làm cho chính xác 12. Hàm getMonth () không bao giờ trả về giá trị trên 11.
không nhiệt tình

7
@LarryBud, lý do có lẽ trái ngược với các phần khác của ngày (ngày trong tháng, năm, giờ, phút, giây ...) luôn được sử dụng làm số như hiện tại, tháng thường được chuyển đổi thành văn bản, sử dụng một mảng các tên, tất nhiên là dựa trên 0. Nó đã là trường hợp trong các thư viện tiêu chuẩn C, phải trên 40 tuổi.
jcaron

19

getMonth()Hàm không được lập chỉ mục dựa trên. Bạn cần phải làmd1.getMonth() + 1

Gần đây tôi đã sử dụng thư viện Moment.js và không bao giờ nhìn lại. Thử nó!


10

Giả sử bạn sử dụng biến của bạn

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

Tháng yêu cầu +1 để chính xác, nó bắt đầu đếm từ 0

d1.getMonth() + 1 // month 

Ngược lại .... các phương thức này KHÔNG cần cộng 1

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

Và chú ý là .getDate()KHÔNG.getDay()

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

Hi vọng điêu nay co ich

Tôi nghi ngờ những phương pháp này thiếu tính nhất quán vì lý do lịch sử

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.