Wie man in einem Jahr in Javascript bestimmt

110

Ich versuche, ein Jahr vor dem heutigen Datum zu bekommen, und es funktioniert nicht.

JS:

var now = new Date();

var oneYr = new Date();
oneYr.setYear(now.getYear() + 1);
$("#yearFromNow").append(oneYr.toString());

var oneMonth = new Date();
oneMonth.setMonth(now.getMonth() + 1);
$("#monthFromNow").append(oneMonth.toString());

Ausgabe:

one mo. = Thu Dec 22 112 15:16:01 GMT-0500 (Eastern Standard Time)

one yr. = Sun Jan 22 2012 15:16:01 GMT-0500 (Eastern Standard Time)

Das Jahr hat Dec 22 112- ?? Der Monat wird korrekt angezeigt Jan 22 2012.

Wenn Sie daran basteln möchten, http://jsbin.com/alezaj/edit#javascript,html,live . Dies ist in Chrome und Firefox.

Vielen Dank!

Ian Davis
quelle

Antworten:

87

Sie sollten getFullYear()anstelle von verwenden getYear(). getYear()gibt das tatsächliche Jahr minus 1900 zurück (und ist daher ziemlich nutzlos).

Ein Datum, das genau ein Jahr ab dem gegenwärtigen Zeitpunkt markiert, wäre also:

var oneYearFromNow = new Date();
oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1);

Beachten Sie, dass das Datum angepasst wird, wenn Sie dies am 29. Februar tun.

Ebenso können Sie über getMonth()und ein Datum in einem Monat abrufen setMonth(). Sie müssen sich keine Sorgen machen, dass Sie vom laufenden Jahr in das nächste Jahr übergehen, wenn Sie dies im Dezember tun. Das Datum wird automatisch angepasst. Gleiches gilt für den Tag des Monats über getDate()und setDate().

Spitze
quelle
1
Für alle, die sich fragen, wie es mit Schaltjahren umgeht, habe ich dies in einer Firefox-Konsole getan ... >> x = neues Datum ('2000-02-29') -> Datum 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01-Mar-2001"
Ivan
29
Ist das nicht komisch? Um in einem Jahr ein Datum in Javascript zu erhalten, muss man schreiben: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM
203

Dies wird Datein Zukunft genau ein Jahr mit nur einer Zeile schaffen. Zuerst erhalten wir das fullYearvon a new Date, erhöhen es, setzen es als das Jahr von a new Date. Sie könnten denken, wir wären dort fertig, aber wenn wir aufhören würden, würde ein Zeitstempel zurückgegeben, kein DateObjekt, also verpacken wir das Ganze in einen DateKonstruktor.

new Date(new Date().setFullYear(new Date().getFullYear() + 1))
JP DeVries
quelle
13
setYear()ist veraltet , setFullYear()sollte stattdessen verwendet werden.
Tsauerwein
1
Ein Liner ohne zuzuordnende Zwischenvariablen! Ausgezeichnet!
theUtherSide
1
Dies wird nicht die Stunden, Minuten und Sekunden behandeln, es wird auf die aktuelle Zeit eingestellt
Dheeraj
32

Wie setYear()veraltet, ist die richtige Variante:

// plus 1 year
new Date().setFullYear(new Date().getFullYear() + 1)
// plus 1 month
new Date().setMonth(new Date().getMonth() + 1)
// plus 1 day
new Date().setDate(new Date().getDate() + 1)

Alle Beispiele geben den Unix-Zeitstempel zurück, wenn Sie ein DateObjekt erhalten möchten - schließen Sie es einfach mit einem anderen einnew Date(...)

Pliashkou
quelle
6

Mit einigen der Antworten auf dieser Seite und hier habe ich meine eigene Antwort gefunden, da keine dieser Antworten sie für mich vollständig gelöst hat.

Hier ist der springende Punkt

var startDate = "27 Apr 2017";
var numOfYears = 1;
var expireDate = new Date(startDate);
expireDate.setFullYear(expireDate.getFullYear() + numOfYears);
expireDate.setDate(expireDate.getDate() -1);

Und hier eine JSFiddle mit einem funktionierenden Beispiel: https://jsfiddle.net/wavesailor/g9a6qqq5/

Wavesailor
quelle
1
Wofür ist expireDate.getDate () - 1?
Uzer
5

Benutze das:

var startDate = new Date();
    startDate.setFullYear(startDate.getFullYear() - 1);
Abdus Salam Azad
quelle
1

Verwenden Sie setFullyear wie von anderen gepostet. Beachten Sie jedoch, dass dies einen Zeitstempelwert und kein Datumsobjekt zurückgibt. Es ist auch ein guter Kandidat, Funktionen über den Prototyp hinzuzufügen. Dies führt uns zu folgendem Muster:

Date.prototype.addYears = function(n) {
    var now = new Date();
    return new Date(now.setFullYear(now.getFullYear() + n));
};

console.log('Year from now is', new Date().addYears(1));
James Westgate
quelle
0

Auf sehr einfache Weise. Verwenden Sie diesen Code.

// define function 
function nextYearDate(date1) {
    var date2 = new Date(date1);
    var date3 = date2.setDate(date2.getDate() - 1);
    var date = new Date(date3);
    var day = date.getDate();
    var month = date.getMonth()+1;
    var year = date.getFullYear()+1;
    var newdate = year + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day;
    $("#next_date").val(newdate);
}
// call function.
<input type="date" name="current_date" id="current_date" value="" onblur="nextYearDate(this.value);" />

<input type="date" name="next_date" id="next_date" value="" onblur="nextYearDate(this.value);" />
Nadeem Haidar
quelle
1
Warum um alles in der Welt erhebt JQuery hier seinen hässlichen Kopf? JQuery! = JS
Uzer