var d = new Date();
d.setMonth(d.getMonth() - 3);
Ini berfungsi untuk Januari. Jalankan cuplikan ini:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Ada beberapa peringatan ...
Sebulan adalah hal yang aneh. Bagaimana Anda mendefinisikan 1 bulan? 30 hari? Kebanyakan orang akan mengatakan bahwa satu bulan yang lalu berarti hari yang sama bulan pada bulan sebelumnya rujukan . Tetapi lebih dari separuh waktu, yaitu 31 hari yang lalu, bukan 30. Dan jika hari ini adalah tanggal 31 di bulan itu (dan ini bukan Agustus atau Decemeber), hari di bulan itu tidak ada di bulan sebelumnya.
Menariknya, Google setuju dengan JavaScript jika Anda bertanya hari apa satu bulan sebelum hari lain :
Ia juga mengatakan bahwa satu bulan adalah 30,4167 hari :
Jadi, apakah satu bulan sebelum 31 Maret adalah hari yang sama dengan satu bulan sebelum 28 Maret, 3 hari sebelumnya? Ini semua tergantung pada apa yang Anda maksud dengan "satu bulan sebelumnya". Pergi mengobrol dengan pemilik produk Anda.
Jika Anda ingin melakukan seperti saat ini, dan memperbaiki kesalahan hari terakhir bulan ini dengan pindah ke hari terakhir bulan itu, Anda dapat melakukan sesuatu seperti ini:
const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());
Jika persyaratan Anda lebih rumit dari itu, gunakan matematika dan tulis beberapa kode. Anda seorang pengembang! Anda tidak perlu menginstal perpustakaan! Anda tidak perlu menyalin dan menempel dari stackoverflow! Anda dapat mengembangkan kode sendiri untuk melakukan tepat apa yang Anda butuhkan!
Saya sarankan menggunakan perpustakaan yang disebut Moment.js.
Ini diuji dengan baik, berfungsi lintas browser dan di sisi server (saya menggunakannya baik dalam proyek Angular dan Node). Ini memiliki dukungan besar untuk tanggal lokal.
http://momentjs.com/
.format()
mengembalikan representasi string tanggal yang diformat dalam format ISO 8601 . Anda juga dapat menggunakannya dengan format tanggal khusus seperti ini:.format('dddd, MMMM Do YYYY, h:mm:ss a')
sumber
"Satu liner" (pada banyak baris agar mudah dibaca)) untuk dimasukkan langsung ke dalam variabel:
sumber
Untuk membuat semuanya menjadi sangat sederhana, Anda dapat menggunakan DateJS, perpustakaan tanggal untuk JavaScript:
http://www.datejs.com/
Kode contoh untuk Anda:
sumber
Ini harus menangani penjumlahan / pengurangan, cukup masukkan nilai negatif untuk dikurangi dan nilai positif untuk ditambahkan. Ini juga memecahkan masalah crossover bulan.
sumber
Jika
setMonth
metode yang ditawarkan oleh gilly3 bukan yang Anda cari, pertimbangkan:Dapat digunakan untuk jumlah waktu berapa pun, cukup atur kelipatan yang tepat.
sumber
Date
kelas, dan sebanyak Date.js lebih disukai, itu pada model setidaknya kalender proleptic lunak yang cukup baik untuk digunakan kasual.setTime()
?Saya suka kesederhanaan jawaban gilly3 , tetapi pengguna mungkin akan terkejut bahwa sebulan sebelum 31 Maret adalah 3 Maret. Saya memilih untuk mengimplementasikan versi yang menempel pada akhir bulan, jadi sebulan sebelum 28 Maret, 29, 30, dan 31 semuanya akan menjadi 28 Februari saat itu bukan tahun kabisat.
sumber
Sudah ada jawaban yang elegan tetapi saya merasa sulit untuk membaca sehingga saya membuat fungsi saya sendiri. Untuk tujuan saya, saya tidak memerlukan hasil negatif tetapi tidak akan sulit untuk memodifikasi.
sumber
sumber
Ini adalah kode terkecil dan termudah.
Menyatakan variabel yang memiliki tanggal saat ini. kemudian hanya dengan menggunakan fungsi inbuilt setMonth kita bisa mendapatkan tanggal kembali 3 bulan.
sumber
Dalam kasus saya, saya perlu mengurangi 1 bulan ke tanggal saat ini. Bagian yang penting adalah angka bulan, jadi tidak peduli di hari mana bulan ini Anda berada, saya perlu bulan lalu. Ini kode saya:
Kurangi 1 bulan ke tanggal sebenarnya itu tidak akurat, itu sebabnya di tempat pertama saya atur hari pertama bulan itu (hari pertama setiap bulan selalu adalah hari pertama) dan di tempat kedua saya kurangi 1 hari, yang selalu mengirim Anda ke bulan lalu. Semoga bisa membantu Anda bung.
sumber
sumber
Lulus objek Tanggal JS dan bilangan bulat berapa bulan yang ingin Anda tambahkan / kurangi.
monthsToAdd
bisa positif atau negatif. Mengembalikan objek tanggal JS.Jika Anda
originalDateObject
31 Maret, dan Anda lulus -1 sebagaimonthsToAdd
, maka tanggal output Anda akan 28 Februari.Jika Anda melewati sejumlah besar bulan, katakanlah 36, itu akan menangani penyesuaian tahun dengan benar.
sumber
sumber
sumber