Bagaimana cara mendapatkan 30 hari sebelum tanggal sekarang?

100

Saya memiliki kotak masukan kalender awal dan kotak masukan kalender akhir. Kami ingin default mulai kotak masukan kalender 30 hari sebelum tanggal sekarang dan kotak masukan kalender akhir menjadi tanggal saat ini. Ini tanggal vars saya.

var today = new Date(),
    dd    = today.getDate(),
    mm    = today.getMonth(),
    yyyy  = today.getFullYear(),
    month = ["January", "February", "March",
        "April", "May", "June", "July", "August",
        "September", "October" "November", "December"],
    startdate = month[mm] + ", " + yyyy.toString();

Tanggal akhir akan menjadi sesuatu seperti var enddate = startdate - 30;Jelas ini tidak akan berhasil.

Jadi jika tanggal sekarang adalah 30 Desember 2011, saya ingin tanggal mulai terbaca 1 Desember 2011.

EDIT: Pertanyaan saya dijawab ... semacam. Date.today();dan Date.today().add(-30);bekerja tapi saya butuh tanggal dalam format January 13, 2012. Tidak Fri Jan 13 2012 10:48:56 GMT -055 (EST). Ada bantuan?

EDIT LEBIH BANYAK: Saat tulisan ini dibuat, tahun 2018. Gunakan saja Moment.js . Itu yang terbaik.

Jesse Atkinson
sumber
stackoverflow.com/questions/563406/… Saya pikir itu mungkin membantu.
Tim Withers

Jawaban:

154

Coba gunakan pustaka tanggal JavaScript Datejs yang sangat baik (yang asli tidak lagi dipertahankan sehingga Anda mungkin tertarik dengan garpu yang dipelihara secara aktif ini ):

Date.today().add(-30).days(); // or...
Date.today().add({days:-30});

[Sunting]

Lihat juga perpustakaan tanggal JavaScript Moment.js yang sangat baik :

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');
maerics
sumber
3
Saya berjuang untuk mendapatkan tanggal mulai dan akhir 30 hari sebelum dan sesudah hari ini di UTC tanpa waktu. Ini berhasil:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
Dylan Valade
3
Saya menggunakan moment()pendekatan dan menambahkan toDate()metode untuk mendapatkan kembali objek tanggal JavaScript. Terima kasih!
Brylie Christopher Oxley
6
Mengapa Anda perlu menggunakan perpustakaan untuk ini? Sepertinya gila.
Harry
1
dapatkah Anda merekomendasikan perpustakaan untuk console.log?
Andre Elrico
160

Coba ini

var today = new Date()
var priorDate = new Date().setDate(today.getDate()-30)

Seperti dicatat oleh @Neel, metode ini kembali dalam format Javascript Timestamp. Untuk mengubahnya kembali ke objek tanggal, Anda perlu meneruskan di atas ke objek Tanggal baru; new Date(priorDate).

Rory McCrossan
sumber
17
Tanpa menggunakan perpustakaan eksternal, saya paling menyukai solusi ini. Terima kasih.
Gowiem
17
Perhatikan bahwa metode ini kembali dalam format Javascript Timestamp. Untuk mengubahnya kembali ke objek tanggal, Anda harus meneruskan di atas kenew Date(priorDate)
Neel
1
Terkadang Anda hanya ingin vanilla js tanpa perpustakaan! Terima kasih :)
Andrew McOlash
Saya mendapatkan setDate () bukan fungsi
chovy
1
@chovy satu-satunya cara yang bisa saya bayangkan Anda mendapatkan kesalahan itu adalah karena Anda tidak memanggil setDate()suatu Dateobjek. Tidak mungkin untuk mendiagnosis tanpa melihat kode Anda.
Rory McCrossan
91

Inilah solusi buruk untuk Anda:

var date = new Date(new Date().setDate(new Date().getDate() - 30));
Nahn
sumber
25
Meriah ini adalah solusi terbaik.
Mark Rogers
8
Setuju - ini adalah solusi terbaik. Inilah solusi tepat dari jawaban Rory McCrossan - tetapi ringkas, dan lengkap (tidak diperlukan perpustakaan eksternal).
Dan Nissenbaum
7
@MarkRogers "Meriah" adalah kata yang tepat. Tanggal JavaScript benar-benar tidak masuk akal.
JosephStyons
Ya, ini adalah solusi sederhana dan terbaik.
Sachini Witharana
40
startDate = new Date(today.getTime() - 30*24*60*60*1000);

The .getTime()Metode mengembalikan JS timestamp standar (milidetik sejak Jan 1/1970) di mana Anda dapat menggunakan operasi matematika biasa, yang bisa diberi makan kembali ke objek Tanggal langsung.

Marc B
sumber
10

Dapatkan 30 hari ke depan mulai hari ini

let now = new Date()
console.log('Today: ' + now.toUTCString())
let next30days = new Date(now.setDate(now.getDate() + 30))
console.log('Next 30th day: ' + next30days.toUTCString())

Dapatkan formulir 30 hari terakhir hari ini

let now = new Date()
console.log('Today: ' + now.toUTCString())
let last30days = new Date(now.setDate(now.getDate() - 30))
console.log('Last 30th day: ' + last30days.toUTCString())

WasiF
sumber
7

Javascript dapat menanganinya tanpa pustaka eksternal.

var today = new Date();
var dateLimit = new Date(new Date().setDate(today.getDate() - 30));

document.write(today + "<br/>" + dateLimit)

Freddy
sumber
4

Mudah.(Using Vanilla JS)

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000);

ISOFormat?

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
kumar manish
sumber
3

let today = new Date()

let last30Days = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 30)

last30Days akan berada di Objek Tanggal

Kevin Chandra
sumber
3

Kode Javascript Vanilla 1 liner sederhana :

const priorByDays = new Date(Date.now() - days * 24 * 60 * 60 * 1000)

Misalnya: days = 7 Asumsikan arusdate = Fri Sep 18 2020 01:33:26 GMT+0530

Hasilnya adalah: Fri Sep 11 2020 01:34:03 GMT+0530

Keindahan ini adalah Anda dapat memanipulasinya untuk mendapatkan hasil dalam bentuk yang diinginkan

  • cap waktu: Date.now() - days * 24 * 60 * 60 * 1000

  • ISOString: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString()

Christopher Fernandes
sumber
2

Saya menggunakan date.js . Ia menangani ini dengan mudah dan menangani semua kejahatan tahun kabisat.

Diodeus - James MacFarlane
sumber
2

Saya lebih suka momen js

startDate = moment().subtract(30, 'days').format('LL')  // January 29, 2015

endDate = moment().format('LL'); // February 28, 2015
Linoy
sumber
1

Ini adalah versi ES6

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )
Lawrence Edmondson
sumber
Apa bedanya dengan jawaban lain, seperti ini ? Selain itu, tidak ada apa pun di sini yang tidak dapat dilakukan di ES5 ... atau bahkan ES3.
Heretic Monkey
1

Anda dapat melakukannya hanya melalui 1 baris kode menggunakan momen di Node JS. :)

    let lastOneMonthDate = moment().subtract(30,"days").utc().toISOString()

Tidak ingin format UTC, LEBIH MUDAH: P

    let lastOneMonthDate = moment().subtract(30,"days").toISOString()
Shagun Pruthi
sumber
1

Jika Anda tidak suka momentjs, Anda dapat menggunakan ini:

let x = new Date()

x.toISOString(x.setDate(x.getDate())).slice(0, 10)

Pada dasarnya ini mendapatkan tanggal saat ini (nilai numerik tanggal bulan ini) dan kemudian menetapkan nilainya. Kemudian itu diubah ke dalam format ISO dari mana saya mengiris tanggal numerik murni (yaitu 2019-09-23)

Semoga bisa membantu seseorang.

Usman Khalil
sumber