Come determinare un anno da adesso in Javascript


111

Sto cercando di ottenere un anno dalla data di adesso e non funziona.

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

Produzione:

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)

L'anno ha Dec 22 112- ?? Il mese viene visualizzato correttamente Jan 22 2012.

Se vuoi armeggiare con esso, http://jsbin.com/alezaj/edit#javascript,html,live . Questo è in Chrome e Firefox.

Grazie!

Risposte:


88

Dovresti usare getFullYear()invece di getYear(). getYear()restituisce l'anno effettivo meno 1900 (e quindi è abbastanza inutile).

Quindi una data che segna esattamente un anno dal momento presente sarebbe:

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

Nota che la data verrà modificata se lo fai il 29 febbraio.

Allo stesso modo, puoi ottenere una data che è tra un mese da adesso tramite getMonth()e setMonth(). Non devi preoccuparti di "passare" dall'anno in corso a quello successivo se lo fai a dicembre; la data verrà regolata automaticamente. Lo stesso vale per il giorno del mese tramite getDate()e setDate().


1
Per chiunque si chieda come affronta gli anni bisestili, l'ho fatto in una console Firefox ... >> x = new Date ('2000-02-29') -> Date 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01-Mar-2001"
Ivan

29
Non è divertente? Per ottenere una data tra un anno in javascript è necessario scrivere: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

205

Ciò creerà un Dateanno esatto nel futuro con una sola riga. Per prima cosa otteniamo fullYearda a new Date, lo incrementiamo, lo impostiamo come anno di a new Date. Potresti pensare che avremmo finito lì, ma se ci fermassimo restituirebbe un timestamp, non un Dateoggetto, quindi avvolgiamo l'intera cosa in un Datecostruttore.

new Date(new Date().setFullYear(new Date().getFullYear() + 1))

13
setYear()è deprecato , setFullYear()dovrebbe essere usato invece.
tsauerwein

1
Una linea senza variabili intermedie da allocare! Eccellente!
theUtherSide

1
questo non gestirà le ore, i minuti ei secondi, sarà impostato sull'ora corrente
Dheeraj

32

Poiché setYear()è deprecato, la variante corretta è:

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

Tutti gli esempi restituiscono il timestamp Unix, se si desidera ottenere un Dateoggetto, è sufficiente avvolgerlo con un altronew Date(...)


6

Usando alcune delle risposte su questa pagina e qui , ho trovato la mia risposta poiché nessuna di queste risposte l'ha risolta completamente per me.

Ecco il punto cruciale

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

E qui un JSFiddle che ha un esempio funzionante: https://jsfiddle.net/wavesailor/g9a6qqq5/


1
a cosa serve il expireDate.getDate () - 1?
Uzer

5

Usa questo:

var startDate = new Date();
    startDate.setFullYear(startDate.getFullYear() - 1);

1

Usa setFullyear come altri hanno pubblicato, ma tieni presente che restituisce un valore timestamp non un oggetto data. È anche un buon candidato imho per aggiungere funzionalità tramite il prototipo. Questo ci porta al seguente schema:

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

0

In modo molto semplice. usa questo codice.

// 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);" />

1
Perché diavolo JQuery sta alzando la sua brutta testa qui? JQuery! = JS
Uzer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.