Wie bekomme ich 30 Tage vor dem aktuellen Datum?

95

Ich habe ein Startkalender-Eingabefeld und ein Endkalender-Eingabefeld. Wir möchten, dass die Standardeinstellungen das Kalender-Eingabefeld 30 Tage vor dem aktuellen Datum beginnen und das End-Kalender-Eingabefeld das aktuelle Datum ist. Hier ist mein Datum vars.

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

Das Enddatum wäre so etwas wie var enddate = startdate - 30;Offensichtlich wird dies nicht funktionieren.

Wenn das aktuelle Datum der 30. Dezember 2011 ist, möchte ich, dass das Startdatum der 1. Dezember 2011 lautet.

EDIT: Meine Frage wurde beantwortet ... irgendwie. Date.today();und Date.today().add(-30);arbeiten, aber ich brauche das Datum im Format von January 13, 2012. Nicht Fri Jan 13 2012 10:48:56 GMT -055 (EST). Irgendeine Hilfe?

MEHR BEARBEITEN: Zum jetzigen Zeitpunkt ist es 2018. Verwenden Sie einfach Moment.js . Es ist das Beste.

Jesse Atkinson
quelle
stackoverflow.com/questions/563406/… Ich denke, das könnte helfen.
Tim Withers

Antworten:

146

Versuchen Sie es mit der hervorragenden Datejs-JavaScript-Datumsbibliothek (das Original wird nicht mehr gepflegt, sodass Sie möglicherweise stattdessen an dieser aktiv gepflegten Gabel interessiert sind ):

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

[Bearbeiten]

Siehe auch die hervorragende JavaScript-Datumsbibliothek von Moment.js :

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');
Maerics
quelle
3
Ich hatte Probleme, die Start- und Enddaten 30 Tage vor und nach dem heutigen Tag in UTC ohne Zeit zu bekommen. Dies funktionierte:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
Dylan Valade
3
Ich habe den moment()Ansatz verwendet und die toDate()Methode angehängt , um das JavaScript-Datumsobjekt zurückzugewinnen. Vielen Dank!
Brylie Christopher Oxley
4
Warum sollten Sie dafür eine Bibliothek verwenden müssen? Das scheint verrückt zu sein.
Harry
1
Können Sie eine Bibliothek für console.log empfehlen?
Andre Elrico
149

Versuche dies

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

Wie von @Neel angegeben, wird diese Methode im Javascript-Zeitstempelformat zurückgegeben. Um es wieder in ein Datumsobjekt zu konvertieren, müssen Sie das Obige an ein neues Datumsobjekt übergeben. new Date(priorDate).

Rory McCrossan
quelle
14
Ohne Verwendung einer externen Bibliothek gefällt mir diese Lösung am besten. Vielen Dank.
Gowiem
16
Beachten Sie, dass diese Methode im Javascript-Zeitstempelformat zurückgegeben wird. Um es wieder in ein Datumsobjekt zu konvertieren, müssen Sie das oben genannte annew Date(priorDate)
Neel
1
Manchmal willst du nur Vanille js ohne Bibliothek! Danke :)
Andrew McOlash
Ich bekomme setDate () ist keine Funktion
chovy
1
@chovy die einzige Art und Weise kann ich mir vorstellen, dass Fehler sind immer ist , weil Sie nicht Aufruf setDate()auf einem DateObjekt. Es ist jedoch unmöglich zu diagnostizieren, ohne Ihren Code zu sehen.
Rory McCrossan
85

Hier ist eine hässliche Lösung für Sie:

var date = new Date(new Date().setDate(new Date().getDate() - 30));
Nahn
quelle
23
Komischerweise ist dies die beste Lösung.
Mark Rogers
7
Einverstanden - das ist die beste Lösung. Dies ist genau die Lösung von Rory McCrossans Antwort - aber präzise und vollständig (keine externen Bibliotheken erforderlich).
Dan Nissenbaum
6
@ MarkRogers "Hilariously" ist das richtige Wort. JavaScript-Daten sind wirklich absurd.
JosephStyons
37
startDate = new Date(today.getTime() - 30*24*60*60*1000);

Die .getTime()Methode gibt einen Standard-JS-Zeitstempel (Millisekunden seit dem 1. Januar 1970) zurück, für den Sie reguläre mathematische Operationen verwenden können, die direkt an das Date-Objekt zurückgegeben werden können.

Marc B.
quelle
Ich mag dieses am besten, danke!
Xunnamius
8

Holen Sie sich die nächsten 30 Tage ab heute

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

Holen Sie sich noch heute die letzten 30 Tage

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
quelle
5

Javascript kann damit ohne externe Bibliotheken umgehen.

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

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

Freddy
quelle
2

Einfach.(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();
manish kumar
quelle
1

Ich benutze date.js . Es handhabt dies leicht und kümmert sich um all die Schaltjahr-Unangenehmkeit.

Diodeus - James MacFarlane
quelle
1

Ich werde Moment js bevorzugen

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

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

Dies ist eine ES6-Version

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )
Lawrence Edmondson
quelle
Wie unterscheidet sich das von anderen Antworten wie dieser ? Außerdem gibt es hier nichts, was in ES5 oder ES3 nicht möglich gewesen wäre.
Heretic Monkey
0

Sie können dies einfach über eine Codezeile mit moment in Node JS tun. :) :)

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

Ich möchte kein UTC-Format, EASIER: P.

    let lastOneMonthDate = moment().subtract(30,"days").toISOString()
Shagun Pruthi
quelle
0

Wenn Sie nicht zu Momenten neigen, können Sie Folgendes verwenden:

let x = new Date()

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

Grundsätzlich wird das aktuelle Datum (numerischer Wert des Datums des aktuellen Monats) abgerufen und dann der Wert festgelegt. Dann wird es in ein ISO-Format konvertiert, aus dem ich das rein numerische Datum (dh 23.09.2019) herausschneide.

Hoffe es hilft jemandem.

Usman Khalil
quelle
0

let today = new Date()

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

last30Days wird im Datumsobjekt sein

Kevin Chandra
quelle