getMonth w javascript podaje ostatni miesiąc


139

Używam datepickera, który podaje datę w formacie Sun Jul 7 00:00:00 EDT 2013. Mimo że miesiąc wskazuje lipiec, jeśli wykonam getMonth, otrzymam miesiąc poprzedni.

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

Co ja robię źle?


14
Tak ... to jest indeksowane przez zero .
Emissary

2
Nie trać zmysłów z datami w javascript. Jeśli możesz, korzystaj z
Moment.js

6
Nie mogę uwierzyć, jakie to prawdziwe
neaumusic

Moment.js nie może poprawnie wykonać dateDiffs. W porządku, jeśli robisz dateDiffs w tym samym miesiącu, ale spróbuj to zrobić w 2 różnych miesiącach (tj. 27-04-2018 i 24-05-2018) i jest to dzień wolny.
rozza

1
Poczekaj, aż spróbujesz getYear()!! ;-)
James Poulose

Odpowiedzi:


266

Ponieważ getmonth () zaczyna się od 0. Być może będziesz musiał d1.getMonth() + 1osiągnąć to, co chcesz.


194
Muszę powiedzieć, że indeksowanie miesiąca o numerze zero jest najgłupszą rzeczą, jaką widziałem od jakiegoś czasu. '
LarryBud

5
dlaczego ktoś miałby chcieć, aby była oparta na 0, jeśli getDate podaje 1-31?
Abhinav Gauniyal

6
Najprawdopodobniej będziesz musiał to zrobić d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- inaczej grudzień byłby 13, nie?
DanielKhan

7
@DanielKhan Nie, ponieważ grudzień byłby 11, więc dodanie 1 do niego dałoby poprawnie 12. Funkcja getMonth () nie powinna nigdy zwracać wartości powyżej 11.
unenthusiasticuser

7
@LarryBud, rozumowanie jest prawdopodobnie takie, że w przeciwieństwie do innych części daty (dzień miesiąca, rok, godziny, minuty, sekundy ...), które są zawsze używane jako liczby, tak jak są, miesiąc jest często konwertowany na tekst, używając tablica nazw, która oczywiście jest oparta na 0. Tak było już w standardowych bibliotekach C, które muszą mieć ponad 40 lat.
jcaron


10

Zakładając, że używasz swojej zmiennej

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

Miesiąc wymaga dokładności +1, zaczyna liczyć od 0

d1.getMonth() + 1 // month 

W przeciwieństwie… te metody NIE potrzebują plusa 1

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

I zauważ, że to .getDate()NIE jest .getDay()

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

Mam nadzieję że to pomoże

Podejrzewam, że te metody nie są spójne z powodów historycznych

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.