189 votes

Comment déterminer un an à partir de maintenant en Javascript

Je suis en train d'essayer d'obtenir la date dans un an à partir de maintenant, et ça 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());

Résultat :

un mois = Jeu Dec 22 112 15:16:01 GMT-0500 (Eastern Standard Time)

un an = Dim Jan 22 2012 15:16:01 GMT-0500 (Eastern Standard Time)

L'année affiche Dec 22 112 - ?? Le mois s'affiche correctement Jan 22 2012.

Si vous voulez le modifier, http://jsbin.com/alezaj/edit#javascript,html,live. Cela fonctionne avec Chrome et Firefox.

Merci !

284voto

JP DeVries Points 2777

Cela créera une Date exactement un an dans le futur avec juste une ligne. Tout d'abord, nous obtenons la fullYear à partir d'une new Date, l'incrémentons, le définissons comme année d'une new Date. Vous pourriez penser que nous aurions terminé là, mais si nous nous arrêtions, cela renverrait un horodatage, pas un objet Date, nous enveloppons donc le tout dans un constructeur Date.

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

15 votes

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

1 votes

Une seule ligne sans variables intermédiaires à allouer! Excellent!

1 votes

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

180voto

Pointy Points 172438

Vous devriez utiliser getFullYear() à la 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 de maintenant serait :

var unAnPlusTard = new Date();
unAnPlusTard.setFullYear(unAnPlusTard.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 qui est dans un mois via getMonth() et setMonth(). Vous n'avez pas à vous soucier du "dépassement" 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().

40voto

Lynx_BY Points 71

Comme setYear() est obsolète, la variante correcte est :

// plus 1 an
new Date().setFullYear(new Date().getFullYear() + 1)
// plus 1 mois
new Date().setMonth(new Date().getMonth() + 1)
// plus 1 jour
new Date().setDate(new Date().getDate() + 1)

Tous les exemples renvoient un timestamp Unix, si vous voulez obtenir un objet Date - enveloppez-le simplement avec un autre new Date(...)

8voto

user2738695 Points 20

Utilisez ceci :

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

7voto

Wavesailor Points 319

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 résolvait entièrement le problème pour moi.

Voici l'essentiel

var startDate = "27 avr 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 votes

Quelle est la raison de l'expireDate.getDate() - 1 ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X