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.