Comment déterminer dans un an en Javascript


111

J'essaie d'avoir un an à partir de la date d'aujourd'hui, et cela ne fonctionne pas.

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

Production:

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'année a Dec 22 112- ?? Le mois s'affiche correctement Jan 22 2012.

Si vous voulez le bricoler, http://jsbin.com/alezaj/edit#javascript,html,live . C'est dans Chrome et Firefox.

Merci!

Réponses:


88

Vous devriez utiliser à la getFullYear()place de getYear(). getYear()renvoie l'année réelle moins 1900 (et est donc assez inutile).

Ainsi, une date marquant exactement un an à partir du moment présent serait:

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

Notez que la date sera ajustée si vous faites cela le 29 février.

De même, vous pouvez obtenir une date dans un mois via getMonth()et setMonth(). Vous n'avez pas à vous soucier du «report» de l'année en cours à l'année suivante si vous le faites en décembre; la date sera ajustée automatiquement. Il en va de même pour le jour du mois via getDate()et setDate().


1
Pour quiconque se demande comment il traite les années bissextiles, je l'ai fait dans une 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
N'est-ce pas hilarant? Pour obtenir une date dans un an en javascript, il faut écrire: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

205

Cela créera Dateexactement un an dans le futur avec une seule ligne. D'abord, nous obtenons le à fullYearpartir de a new Date, incrémentons-le, définissons cela comme l'année de a new Date. Vous pourriez penser que nous en aurions terminé là-bas, mais si nous nous arrêtions, cela renverrait un horodatage, pas un Dateobjet, donc nous enveloppons le tout dans un Dateconstructeur.

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

13
setYear()est obsolète , setFullYear()doit être utilisé à la place.
tsauerwein

1
Une doublure sans variables intermédiaires à allouer! Excellent!
theUtherSide

1
cela ne gérera pas les heures, les minutes et les secondes, il sera réglé sur l'heure actuelle
Dheeraj

32

Comme il setYear()est déconseillé, la variante correcte est:

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

Tous les exemples renvoient l'horodatage Unix, si vous voulez obtenir un Dateobjet - enveloppez-le simplement avec un autrenew Date(...)


6

En utilisant certaines des réponses sur cette page et ici , j'ai trouvé ma propre réponse car aucune de ces réponses ne l'a complètement résolue pour moi.

En voici le nœud

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

Et voici un JSFiddle qui a un exemple fonctionnel: https://jsfiddle.net/wavesailor/g9a6qqq5/


1
à quoi sert expireDate.getDate () - 1?
Uzer le

5

Utilisez ceci:

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

1

Utilisez setFullyear comme d'autres l'ont publié, mais sachez que cela renvoie une valeur d'horodatage et non un objet de date. C'est également un bon candidat à mon avis pour ajouter des fonctionnalités via le prototype. Cela nous amène au schéma suivant:

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

De manière très simple. utilisez ce 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);" />

1
Pourquoi diable JQuery élève-t-il sa tête laide ici? JQuery! = JS
Uzer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.