getMonth di javascript memberikan bulan sebelumnya


150

Saya menggunakan datepicker yang memberikan tanggal dalam format Sun Jul 7 00:00:00 EDT 2013. Meskipun bulan mengatakan Juli, jika saya melakukan getMonth, saya akan memberi saya bulan sebelumnya.

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

Apa yang saya lakukan salah?


18
Ya ... tidak diindeks .
Utusan

2
Jangan kehilangan akal dengan tanggal dalam javascript. Gunakan Moment.js jika Anda bisa
Valamas

7
saya tidak percaya betapa nyatanya ini
neaumusic

Moment.js tidak dapat melakukan dateDiffs dengan benar. Tidak apa-apa jika Anda melakukan dateDiff dalam bulan yang sama, tetapi cobalah melakukannya dalam 2 bulan yang berbeda (yaitu, 27-04-2018 dan 24-05-2018) dan itu adalah hari keluar.
rozza

1
Tunggu sampai kamu mencoba getYear()!! ;-)
James Poulose

Jawaban:


290

Karena getmonth () mulai dari 0. Anda mungkin ingin d1.getMonth() + 1mencapai apa yang Anda inginkan.


222
Harus saya katakan, untuk mengindeks bulan nomor nol adalah hal terbodoh yang pernah saya lihat dalam beberapa waktu. '
LarryBud

8
mengapa seseorang menginginkannya berdasarkan 0 jika getDate memberikan 1-31?
Abhinav Gauniyal

6
Kemungkinan besar Anda harus melakukannya d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- jika tidak Desember akan menjadi 13, bukan?
DanielKhan

9
@DanielKhan Tidak, karena Desember akan menjadi 11, jadi menambahkan 1 ke dalamnya akan membuatnya menjadi 12. Fungsi getMonth () seharusnya tidak pernah mengembalikan nilai di atas 11.
unenthusiasticuser

8
@LarryBud, alasannya mungkin bertentangan dengan bagian lain dari tanggal (hari bulan, tahun, jam, menit, detik ...) yang selalu digunakan sebagai angka sebagaimana adanya, bulan sering diubah menjadi teks, menggunakan larik nama, yang tentu saja berbasis 0. Itu sudah terjadi di perpustakaan standar C, yang harus berusia di atas 40 tahun.
jcaron

22

getMonth()fungsi berbasis indeks nol. Anda perlu melakukand1.getMonth() + 1

Baru-baru ini saya menggunakan perpustakaan Moment.js dan tidak pernah melihat ke belakang. Cobalah!


Bisakah Anda mengatakan bagaimana Anda menggunakannya?
Muhammed YILMAZ

14

Anggap saja Anda menggunakan variabel Anda

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

Bulan membutuhkan +1 agar akurat, mulai dihitung pada 0

d1.getMonth() + 1 // month 

Sebaliknya .... metode ini TIDAK perlu ditambah 1

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

Dan perhatikan itu .getDate()BUKAN.getDay()

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

Semoga ini membantu

Saya menduga metode ini kurang konsisten karena alasan historis


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' });

ATAU

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

Keluaran

Tanggal = 8/13/2020

Waktu = 12:06:13 AM

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.