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?

pengembang747
sumber
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.

Rahul Tripathi
sumber
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!

letiagoalves
sumber
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

jasonleonhard
sumber
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

Murad
sumber