Saya telah menggunakan fungsi ini tetapi saya ingin tahu cara apa yang paling efisien dan akurat untuk mendapatkannya.
function daysInMonth(iMonth, iYear) {
return 32 - new Date(iYear, iMonth, 32).getDate();
}
javascript
date
Chatu
sumber
sumber
return new Date(year, month + 1, 0).getDate();
var d=new Date();d.setFullYear(year, month, date);
.month
yang 12 ? Bukankah seharusnyaDate
konstruktor mengambil nilai dari 0 hingga 11 ?Jika Anda sering memanggil fungsi ini, mungkin berguna untuk menyimpan nilai dalam cache untuk kinerja yang lebih baik.
Berikut adalah versi cache dari jawaban FlySwat :
sumber
Date
(jadi tidak ada jawaban universal untuk pertanyaan itu) dan seberapa sering kode Anda akan memanggildayInMonth
dengan nilai yang sama. Jadi satu-satunya jawaban yang masuk akal adalah: buat profil kode Anda dan tolok ukurnya!cache
,, saya menggunakanlocalStorage
.Beberapa jawaban (juga pada pertanyaan lain) memiliki masalah tahun kabisat atau menggunakan objek Tanggal. Meskipun javascript
Date object
mencakup kira-kira 285616 tahun (100.000.000 hari) di kedua sisi tanggal 1 Januari 1970, saya muak dengan semua jenis inkonsistensi tanggal yang tidak terduga di berbagai browser (terutama tahun 0 hingga 99). Saya juga penasaran bagaimana cara menghitungnya.Jadi saya menulis yang sederhana dan di atas segalanya, algoritma kecil untuk menghitung jumlah hari yang benar ( Proleptic Gregorian / Astronomical / ISO 8601: 2004 (klausul 4.3.2.1), jadi tahun
0
ada dan merupakan tahun kabisat dan tahun negatif didukung ) jumlah hari untuk bulan dan tahun tertentu.Ini menggunakan algoritma bitmask-modulo leapYear sirkuit pendek (sedikit dimodifikasi untuk js) dan algoritma umum mod-8 bulan.
Perhatikan bahwa dalam
AD/BC
notasi, tahun 0 M / SM tidak ada: sebagai gantinya tahun1 BC
adalah tahun kabisat!JIKA Anda perlu menghitung notasi BC maka kurangi satu tahun dari nilai tahun (jika tidak positif) dulu !! (Atau kurangi tahun dari
1
untuk perhitungan tahun selanjutnya.)Perhatikan, bulan harus berbasis 1!
Catatan, ini adalah algoritma yang berbeda maka pencarian angka ajaib yang saya gunakan dalam Javascript saya menghitung hari dalam setahun (1 - 366) jawaban, karena di sini cabang tambahan untuk tahun kabisat hanya diperlukan untuk bulan Februari.
sumber
Untuk menghilangkan kebingungan saya mungkin akan membuat string bulan berbasis karena saat ini berbasis 1.
sumber
Dengan moment.js Anda dapat menggunakan metode daysInMonth ():
sumber
Ini dia
sumber
Sintaks ES6
kembali
sumber
sumber
Mempertimbangkan tahun kabisat:
sumber
Perhitungan langsung satu baris (tanpa objek Tanggal):
Variasi dengan bulan berbasis 0:
sumber
Jika Anda menginginkan jumlah hari di bulan saat ini dari objek Tanggal, pertimbangkan metode berikut:
Kemudian Anda dapat menjalankannya seperti ini:
sumber
Dalam satu baris:
sumber
Mungkin agak berlebihan jika dibandingkan dengan jawaban yang dipilih :) Tapi ini dia:
Saya menemukan kode di atas di sini: https://github.com/ElemeFE/element/blob/dev/src/utils/date-util.js
Saya menemukan kode di atas di sini: https://github.com/datejs/Datejs/blob/master/src/core.js
sumber
Jika Anda akan meneruskan variabel tanggal, ini mungkin membantu
sumber
Mungkin bukan solusi yang paling elegan, tetapi mudah dipahami dan dipelihara; dan, itu teruji dalam pertempuran.
sumber