2011-12-22 9 views
53

Sto cercando di ottenere un anno dalla data di oggi, e non funziona.Come determinare un anno da oggi in Javascript

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

uscita:

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 visualizza correttamente Jan 22 2012.

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

Grazie!

risposta

35

È necessario utilizzare getFullYear() anziché getYear(). getYear() restituisce l'anno effettivo meno 1900 (e quindi è abbastanza inutile).

+1

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

+6

Non è esilarante? Per ottenere un appuntamento da un anno in javascript è necessario scrivere: 'new Date (new Date(). SetFullYear (new Date(). GetFullYear() + 1))' – LucasM

99

Ciò creerà uno Date esattamente un anno nel futuro con una sola riga. Per prima cosa prendiamo il fullYear da un new Date, lo incrementiamo, lo impostiamo come l'anno di un new Date. Si potrebbe pensare che ci saremmo fatti lì, ma se ci fermassimo, restituiremmo un timestamp, non un oggetto Date, in modo da avvolgere il tutto in un costruttore Date.

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

'setYear()' è [deprecato ] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear), dovrebbe essere usato 'setFullYear()'. – tsauerwein

+0

perfetto! grazie – KingRider

+0

Semplice, elegante, brillante. Congratulazioni e grazie! –

18

Come setYear() è deprecato, corretta 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) 

Tutti gli esempi restituiscono Unix timestamp, se si vuole ottenere Date oggetto - basta avvolgerlo con un altro new Date(...)

0

Usa setFullYear come altri hanno postato ma sappiate che questo restituisce un valore di timestamp non un oggetto di data. È anche un buon candidato per aggiungere funzionalità tramite il prototipo. Questo ci porta alla 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)); 
4

Utilizzando alcune delle risposte in questa pagina e here, mi si avvicinò con la mia risposta come nessuna di queste risposte completamente risolto per me.

Ecco 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 a a JSFiddle che ha un esempio funzionante: https://jsfiddle.net/wavesailor/g9a6qqq5/

+0

Hai 'var' due volte sulla prima riga e' myStr' non è definito prima di essere utilizzato. – Caltor

+0

Grazie a @Caltor - corretto l'errore di battitura – Wavesailor

0

mi si avvicinò con un semplice solution che richiede anni bisestili in considerazione.

Ad esempio:

var originalDate = new Date('February 29th, 2016 12:00:00'); 
var newDate = dateAdd(originalDate, 1, 'years'); // => 'February 28th, 2017 

Questo funziona anche con le altre unità di tempo come giorni, settimane, mesi, ecc

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