Güncel tarihten 30 gün önce nasıl alınır?


101

Bir başlangıç ​​takvimi giriş kutum ve bir bitiş takvimi giriş kutum var. Varsayılan başlangıç ​​takvimi giriş kutusunun geçerli tarihten 30 gün önce ve bitiş takvimi giriş kutusunun da geçerli tarih olmasını istiyoruz. İşte randevum değişkenlerim.

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();

Bitiş tarihi şöyle bir şey olurdu var enddate = startdate - 30;Açıkçası bu işe yaramayacak.

Dolayısıyla, geçerli tarih 30 Aralık 2011 ise, başlangıç ​​tarihinin 1 Aralık 2011 olmasını isterim.

DÜZENLEME: Sorum cevaplandı ... bir nevi. Date.today();ve Date.today().add(-30);iş ama biçiminde tarihe ihtiyacım var January 13, 2012. Değil Fri Jan 13 2012 10:48:56 GMT -055 (EST). Herhangi bir yardım?

DAHA FAZLA DÜZENLEME: Bu yazı itibariyle 2018. Sadece Moment.js kullanın . Bu en iyisi.


stackoverflow.com/questions/563406/… Bunun yardımcı olabileceğini düşünüyorum.
Tim Withers

Yanıtlar:


155

Mükemmel Datejs JavaScript tarih kitaplığını kullanmayı deneyin (orijinali artık korunmamaktadır, bu nedenle aktif olarak sürdürülen bu çatal ile ilgilenebilirsiniz ):

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

[Düzenle]

Mükemmel Moment.js JavaScript tarih kitaplığına da bakın :

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');

3
Başlangıç ​​ve bitiş tarihlerini bugün UTC'de saat olmadan 30 gün önce ve sonra almakta zorlanıyordum. Bu işe yaradı:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
Dylan Valade

3
moment()Yaklaşımı kullandım ve toDate()JavaScript tarih nesnesini geri almak için yöntemi ekledim. Teşekkürler!
Brylie Christopher Oxley

6
Bunun için neden bir kitaplık kullanmanız gerekiyor? Bu çılgınca görünüyor.
Harry

1
console.log için bir kitaplık önerebilir misiniz?
Andre Elrico

162

Bunu dene

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

@Neel tarafından belirtildiği gibi, bu yöntem Javascript Timestamp biçiminde geri döner. Bunu tarih nesnesine geri dönüştürmek için, yukarıdakileri yeni bir Date nesnesine iletmeniz gerekir; new Date(priorDate).


17
Harici bir kitaplık kullanmadan bu çözümü en çok seviyorum. Teşekkürler.
Gowiem

17
Bu yöntemin Javascript Timestamp biçiminde döndüğünü unutmayın. Bunu tekrar tarih nesnesine dönüştürmek için, yukarıdakilerinew Date(priorDate)
Neel

1
Bazen kitaplığı olmayan vanilyalı js istersiniz! Teşekkürler :)
Andrew McOlash

SetDate () bir işlev değil
chovy

1
@chovy'nin bu hatayı aldığını hayal edebilmemin tek yolu setDate(), bir Datenesneyi aramıyor olmandır . Yine de kodunuzu görmeden teşhis etmek imkansızdır.
Rory McCrossan

91

İşte sizin için çirkin bir çözüm:

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

25
Komik bir şekilde bu en iyi çözüm.
Mark Rogers

8
Kabul edildi - bu en iyi çözümdür. Bu tam olarak Rory McCrossan'ın cevabının çözümüdür - ancak özlü ve eksiksiz (harici kitaplık gerekmez).
Dan Nissenbaum

7
@MarkRogers "Komik" doğru kelime. JavaScript tarihleri ​​gerçekten saçmadır.
JosephStyons

Evet, bu basit ve en iyi çözümdür.
Sachini Witharana

40
startDate = new Date(today.getTime() - 30*24*60*60*1000);

.getTime()Yöntem doğrudan Tarihi nesnesine geri beslenebilir düzenli matematik işlemlerini kullanarak bu araç üzerinde (Jan 1/1970 beri milisaniye) standart JS zaman damgası döndürür.


10

Önümüzdeki 30 günü bugünden itibaren alın

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())

Son 30 günlük formu bugün alın

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())


7

Javascript, herhangi bir harici kitaplık olmadan işleyebilir.

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

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


5

Kolay.(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();

4

Basit 1 astarlı Vanilya Javascript kodu:

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

Örneğin: days = 7 Geçerli olduğunu varsayındate = Fri Sep 18 2020 01:33:26 GMT+0530

Sonuç şöyle olacaktır: Fri Sep 11 2020 01:34:03 GMT+0530

Bunun güzelliği, istediğiniz türde sonuç almak için onu manipüle edebilmenizdir.

  • zaman damgası: Date.now() - days * 24 * 60 * 60 * 1000

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


3

let today = new Date()

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

last30Days Tarih Nesnesinde olacak



2

Anı tercih edeceğim js

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

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

1

Bu bir ES6 sürümüdür

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )

Nasıl gibi diğer cevapların hiçbirinde bu farklı olduğunu bu bir ? Ayrıca burada ES5'te veya ES3'te bile yapılamayacak hiçbir şey yok.
Heretic Maymun

1

Bunu, Node JS'de moment kullanarak sadece 1 satır kodla yapabilirsiniz. :)

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

UTC biçimini istemiyorum, KOLAY: P

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

1

Momentj'lere meyilli değilseniz, bunu kullanabilirsiniz:

let x = new Date()

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

Temel olarak geçerli tarihi (geçerli ayın sayısal değerini) alır ve ardından değeri ayarlar. Ardından, saf sayısal tarihi dilimlediğim ISO biçimine dönüştürülür (yani 2019-09-23)

Umarım birine yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.