Ajouter des jours à la date JavaScript


1097

Comment ajouter des jours au courant en Dateutilisant JavaScript. JavaScript a-t-il une fonction intégrée comme .Net AddDay?

Réponses:


1212

Vous pouvez en créer un avec: -

Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

var date = new Date();

alert(date.addDays(5));

Cela prend soin d'incrémenter automatiquement le mois si nécessaire. Par exemple:

8/31 + 1 jour deviendra 9/1 .

Le problème avec l'utilisation setDatedirecte est qu'il s'agit d'un mutateur et qu'il vaut mieux éviter ce genre de chose. L'ECMA a jugé bon de traiter Datecomme une classe mutable plutôt que comme une structure immuable.


17
Simplifié:Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
Duncan

27
@Duncan Êtes-vous sûr que c'est la même chose que ci-dessus? Celui-ci ajoute simplement 24 heures, mais un jour n'est pas toujours 24 heures . Je suppose que la question est de savoir comment incrémenter la partie date d'un jour, sans changer la partie temps.
Tamás Bolvári

88
864E5pour une raison quelconque, je préfère écrire 24*60*60dans mon code :)
Mars Robertson

62
Les gars, n'utilisez pas la méthode d'ajout de 864E5 car cela ne prend pas de différence d'heure d'été où les jours peuvent être de 23 ou 25 heures.
sbrbot

12
Pour ceux d'entre vous qui s'inquiètent de l'heure d'été - ne le faites pas. Ces algorithmes modifient la date sous-jacente, pas la façon dont la date est interprétée. L'heure d'été est implémentée dans les getters et les setters de la date - les getters pour soustraire une heure en été, et le setter pour ajouter cette heure en arrière pendant l'été pour normaliser l'heure. Mais seulement lorsque vous utilisez une heure absolue - les heures relatives n'ont pas besoin d'être interprétées. C'est pourquoi les mathématiques de date fonctionnent. À mon humble avis
Gerard ONeill

755

Bonne réponse :

function addDays(date, days) {
  var result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
}

Réponse incorrecte :

Cette réponse fournit parfois le résultat correct mais renvoie très souvent la mauvaise année et le mauvais mois. La seule fois où cette réponse fonctionne, c'est lorsque la date à laquelle vous ajoutez des jours se trouve avoir l'année et le mois en cours.

// Don't do it this way!
function addDaysWRONG(date, days) {
  var result = new Date();
  result.setDate(date.getDate() + days);
  return result;
}

Preuve / exemple

Vérifiez ce JsFiddle


@bzlm, oui essentiellement la même chose. Cela ne modifie tout simplement pas le prototype Date. Je voulais également souligner les défauts de la réponse principale.
sparebytes

La réponse acceptée a été modifiée il y a quinze jours pour souligner ses défauts. Pensez-vous qu'il a besoin de modifications supplémentaires? Si c'est le cas, comment?
bzlm

7
@bzlm: Oui, je pense que la note devrait se lire "cette approche échoue si la date" à partir de "n'est pas dans la même année ou le même mois que la date actuelle ". Je crains toujours que les utilisateurs ne regardent la réponse et ne lisent pas l'avertissement car il ne se démarque pas. Merci.
sparebytes

3
Je pense que même si ce travail n'est pas correct. Il n'y a pas un tel constructeur pour Date: var result = new Date (date); , voir http://www.w3schools.com/js/js_dates.asp . Même si cela fonctionne généralement, cela peut parfois conduire à de mauvais résultats en raison de la conversion en chaîne et vice versa. Il doit s'agir de var result = new Date (date.getTime ());
Marcin

2
@AnkitBalyan, Voir d'autres réponses. Il peut ne pas fonctionner correctement en raison de l'heure d'été
sparebytes

188
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

Soyez prudent, car cela peut être délicat. Lorsque vous définissez "demain", cela ne fonctionne que parce que sa valeur actuelle correspond à l'année et au mois pour "aujourd'hui". Cependant, la définition d'un numéro de date tel que "32" fonctionnera normalement très bien pour le déplacer vers le mois suivant.


1
Ouais? Mais qu'est-ce que c'est? (couru le 31 mars 2010): aujourd'hui = nouvelle date (); demain = nouvelle date (); demain.setDate (aujourd'hui.getDate () + 1); alerte (demain.getMonth ()); Dit "3". alerte (demain); est correct ... Pourquoi ???
d -_- b

12
@sims month est 0 indexé. Le mois 3 est avril
Joel Coehoorn

7
Pourquoi la nécessité de créer 2 objets de date distincts? Pourquoi ne pas utiliser simplement le même objet date: var d = new Date(); d.setDate( d.getDate() + 1 );?
Joseph Silber

8
Cette approche ne fonctionne pas sur plusieurs années. Si votre date de début date d'il y a quelques années, getDate()renvoie le jour de cette année . Ensuite, l'appel setDatedéfinit le jour de l' année en cours . Ce n'est donc PAS une bonne solution générale. La réponse de @ AnthonyWJones fonctionne réellement correctement.
Drew Noakes du

3
@ DrewNoakes - votre affirmation selon laquelle cela ne fonctionne pas sur plusieurs années est fausse. getDate renvoie le jour du mois, pas le "jour de cette année". Par exemple, le var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)3 janvier 2017 qui s'étale sur 2 ans.
RobG

124

Ma solution simple est:

nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);

cette solution n'a pas de problème avec l'heure d'été. En outre, on peut ajouter / sous-compenser n'importe quel décalage pendant des années, des mois, des jours, etc.

day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);

est le bon code.


13
Remarque: cela réinitialise l'heure à 00:00:00 (peut être un problème ou non)
Álvaro González

Ne fonctionne pas le dernier jour d'un mois, comme vous le dites. Rend cela inutilisable 12 jours par an. Cela ressemble à un cauchemar à déboguer !!!
Drew Noakes du

6
Non Drew, il est utilisable tous les jours de l'année. Vous pouvez mettre un décalage de date supérieur à 31 ou un décalage de mois supérieur à 12 et cette fonction le recalculera en tant que jour du mois suivant ou du mois de l'année prochaine. Ainsi, par exemple: nextday = new Date (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); est parfaitement bien codé.
sbrbot

il y a getMonth () + 22 - ce que vous pensez que ça va marcher!?
sbrbot

1
J'accepte, utilisez cette façon. Nous avons juste eu un bug à cause de l'heure d'été parce que nous l'utilisions setDate.
Jelle

95

Ces réponses me paraissent déroutantes, je préfère:

var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);

getTime () nous donne des millisecondes depuis 1970, et 86400000 est le nombre de millisecondes par jour. Par conséquent, ms contient des millisecondes pour la date souhaitée.

L'utilisation du constructeur en millisecondes donne l'objet de date souhaité.


46
Cette solution ne prend pas en compte l'heure d'été. Ainsi, par exemple, cela reviendra à la même date, 23 heures plus tard: new Date(new Date('11/4/2012').getTime() + 86400000)
Noah Harrison

6
@NoahMiller Le problème que vous évoquez pourrait être une fonctionnalité et non un bug! Ajouter 24 heures par jour est parfois la bonne chose à faire, dans le but de connaître l'heure résultante en fonction de l'heure d'été. La date de retour de votre exemple a une valeur d'heure de 23 heures le 4 novembre, ce qui correspond à 24 heures plus tard ce jour-là. L'affiche originale posait des questions sur la date et l'heure, ce qui semblerait indiquer un certain désir de connaître l'heure exacte de la journée. Cette réponse est correcte si vous êtes dans le cas où votre objectif est le temps 24 heures plus tard.
Andy Novocin

3
Je suis d'accord Noah, var d2 = new Date (d1.valueOf () + 24 * 60 * 60 * 1000) fait ce qu'il dit, ajoute une journée entière de ticks à une date.
Corey Alix

6
C'est absolument correct dans certains cas (par exemple pour les cookies 1 jour) et une solution plus simple que la plupart des autres. Je ne comprends pas pourquoi il y a tant de downvotes et si peu de upvotes: /
Matmarbon

48

Essayer

var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));

L'utilisation de setDate () pour ajouter une date ne résoudra pas votre problème, essayez d'ajouter quelques jours à un mois de février, si vous essayez d'ajouter de nouveaux jours, cela n'entraînera pas ce que vous attendiez.


26
Non, cela ne doit pas être marqué comme la bonne réponse car cette solution suppose que chaque jour a 24 * 60 * 60 * 1000 secondes mais ce n'est pas le cas (heure d'été)!
sbrbot

Des preuves du problème de «février» avec setDate()? Est-ce ceci: stackoverflow.com/questions/5497637/…
nobar

9
+1 Ceci DEVRAIT être marqué comme la bonne réponse. Je crois que «l'heure d'été» concerne la présentation et non la valeur , qui est simplement le nombre de millisecondes. Du point de vue valeur - le jour est le nombre CONST de millisecondes, alors qu'en termes de présentation il peut varier.
tombé

1
@ disfated — ce n'est pas la bonne réponse. Le jour qui passe à l'heure d'été a 25 heures, mais cette méthode n'ajoute que 24, la date sera donc la même. L'utilisation de 24 heures pour représenter une journée fonctionne si des méthodes UTC sont utilisées à la place, mais pourquoi s'embêter lors de l'utilisation de setDate est plus pratique? ;-)
RobG

38

Je viens de passer des heures à essayer de comprendre ce que l'accord avec l'année n'a pas ajouté en suivant les exemples principaux ci-dessous.

Si vous voulez simplement ajouter n jours à la date que vous avez, il vaut mieux y aller:

myDate.setDate (myDate.getDate () + n);

ou la version longue

var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);

Ce truc aujourd'hui / demain est déroutant. En définissant la date actuelle dans votre nouvelle variable de date, vous gâcherez la valeur de l'année. si vous travaillez à partir de la date d'origine, vous ne le ferez pas.


7
En lisant toutes les réponses jusqu'à ce que je trouve ce bijou ici. Maintenant, cela a du sens. Incroyable que la chose aujourd'hui / demain ait été copiée dans presque toutes les réponses, alors que cela n'a aucun sens et que ce n'est pas "pour la lisibilité et la clarté" comme le dit l'auteur dans la réponse la plus votée - dans le commentaire le plus voté -, c'est déroutant et une mauvaise pratique et mal
Cesc

23

Si vous le pouvez, utilisez moment.js . JavaScript n'a pas de très bonnes méthodes de date / heure natives. Voici un exemple de syntaxe de Moment:

var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>

Référence: http://momentjs.com/docs/#/manipulating/add/


1
@ kpull1, le demandeur n'a pas restreint le domaine de la solution en demandant s'il existe une solution intégrée.
user2910265

4
Note moderne: Moment.js est incroyablement lourd à ajouter pour un si petit objectif. Il fait plusieurs centaines de Ko et n'est pas compatible avec les packs Web.
Joshua Comeau

1
Notre bibliothèque préférée est date-fns. Webpack-friendly, rapide et traite les dates comme immuables.
Freewalker

1
@LukeWilliams n'a jamais entendu parler de date-fns jusqu'à présent. va le vérifier. Merci.
user2910265

2
@JoshuaComeau Si vous le téléchargez à partir de cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js , cela prend 53 248 octets sur le disque. J'imagine que c'est toute la boule de cire, mais je ne sais pas. Quoi qu'il en soit. Ce n'est pas grave.
birdus

22
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

CodePen

var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);


2
Votez pour ne pas avoir besoin d'une variable de date intermédiaire.
Jeff Lowery

c'est la meilleure réponse car elle n'a pas de mutation
knocte

Tous les jours n'ont pas 24h, il échoue pour l'heure d'été et les secondes intercalaires.
Stephan

19

J'ai créé ces extensions hier soir:
vous pouvez passer des valeurs positives ou négatives;

exemple:

var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);


Date.prototype.addDays = function (num) {
    var value = this.valueOf();
    value += 86400000 * num;
    return new Date(value);
}

Date.prototype.addSeconds = function (num) {
    var value = this.valueOf();
    value += 1000 * num;
    return new Date(value);
}

Date.prototype.addMinutes = function (num) {
    var value = this.valueOf();
    value += 60000 * num;
    return new Date(value);
}

Date.prototype.addHours = function (num) {
    var value = this.valueOf();
    value += 3600000 * num;
    return new Date(value);
}

Date.prototype.addMonths = function (num) {
    var value = new Date(this.valueOf());

    var mo = this.getMonth();
    var yr = this.getYear();

    mo = (mo + num) % 12;
    if (0 > mo) {
        yr += (this.getMonth() + num - mo - 12) / 12;
        mo += 12;
    }
    else
        yr += ((this.getMonth() + num - mo) / 12);

    value.setMonth(mo);
    value.setYear(yr);
    return value;
}

7
La méthode .addDays () ne fonctionne pas pour les dates qui traversent les limites d'heure d'été.
mskfisher

1
C'est l'une des meilleures réponses ici parce que vous utilisez (correctement) le nombre de millis depuis l'epoc pour représenter les dates / heures, et ajoutez des quantités de millis pour les ajustements ... Pourquoi alors n'avez-vous pas gardé cela pour "addMonths"! ? Et pourquoi ne pas ajouter d'année? Vous êtes-vous ennuyé?
Robin

Outre les mois, les périodes peuvent être représentées par des nombres statiques. Mais les mois peuvent être de quatre longueurs différentes. En outre, toute longueur de période de jours et plus peut avoir une longueur variable à l'heure d'été, vous ne pouvez donc plus utiliser l'ajout basé sur le temps sans un autre niveau de complexité. J'ai ajouté addYears () et j'ai corrigé addMonths ().
Suamere

14

Sans utiliser la deuxième variable, vous pouvez remplacer 7 par vos x prochains jours:

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));

14

soustraire 30 jours d'utilisation (24h = 86400000ms)

new Date(+yourDate - 30 *86400000)


Lorsque vous essayez de calculer la date et l'heure, rappelez-vous toujours que la date et l'heure sont basées sur des millisecondes en informatique, ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) new Date (+ yourDate + 30 * (24 * 60 * 60 * 1000))
Ashraf Abusada

13

La solution la plus simple.

 Date.prototype.addDays = function(days) {
   this.setDate(this.getDate() + parseInt(days));
   return this;
 };

 // and then call

 var newDate = new Date().addDays(2); //+2 days
 console.log(newDate);

 // or

 var newDate1 = new Date().addDays(-2); //-2 days
 console.log(newDate1);


Je pense que c'est la meilleure solution. Si nous étendons la classe Date, il est plus logique que l'instance Date soit elle-même mise à jour.
Porlune

10

Merci Jason pour votre réponse qui fonctionne comme prévu, voici un mélange de votre code et du format pratique d'AnthonyWJones:

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}

6
Il ne prend pas en compte l'heure d'été lorsqu'il y a plus ou moins de 86 400 000 secondes dans une journée et peut entraîner une erreur logique (bogue de programme) dans votre code.
sbrbot

Parfois, c'est nécessaire. L'API eBay propose des enchères de x jours qui sont basées sur 24 heures, de sorte que votre article se terminera à une heure différente de celle qui augmente si le statut de l'heure d'été change en cours d'enchère. Dans ce cas, vous devez utiliser ce type de fonction pour éviter les erreurs logiques.
Andy Novocin

10

Tard dans la soirée, mais si vous l'utilisez, jQueryil existe un excellent plugin appelé Moment:

http://momentjs.com/

var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();

http://momentjs.com/docs/#/manipulating/

Et plein d'autres bonnes choses là-dedans!

Edit: référence jQuery supprimée grâce au commentaire d'Aikeru


1
moment n'a pas besoin de jQuery :)
aikeru

Encore mieux dans ce cas !!
RemarkLima

1
Oui, après avoir été trop longtemps avec Plain ol 'JS, j'ai utilisé Moment, et ça marche (tm)!
caseyamcl

Pourquoi voudriez-vous utiliser le plugin alors que quelques lignes de JS feront l'affaire?
frenchie

@frenchie parce que, ce qui commence par quelques lignes de JS et parce que votre application manipule clairement les informations relatives aux jours, dates et heures, ce sera bientôt quelques 1000 lignes de JS, alors il vous sera demandé de localiser l'application sur 12 langues et fuseaux horaires et vous auriez souhaité avoir commencé avec quelque chose comme le moment;)
RemarkLima

10

Une solution conçue pour l' exploitant du pipeline :

const addDays = days => date => {
  const result = new Date(date);

  result.setDate(result.getDate() + days);

  return result;
};

Usage:

// Without the pipeline operator...
addDays(7)(new Date());

// And with the pipeline operator...
new Date() |> addDays(7);

Si vous avez besoin de plus de fonctionnalités, je vous suggère de regarder dans les date-fns bibliothèque .


8

Vieux je sais, mais parfois j'aime ça:

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}

2
Celui-ci a le plus de sens pour moi. C'est simple, élégant et ne tombe pas en priant pour les problèmes évoluant au fil des mois / années.
uadrive

1
Réponse la plus simple présentée. En s'appuyant sur cela, le prototype «addDays» serait le suivant:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974

Tous les jours n'ont pas 24h, il échoue pour l'heure d'été et les secondes intercalaires.
Stephan

8

J'ai eu des problèmes avec l'heure d'été avec la solution proposée.

En utilisant getUTCDate/ à la setUTCDateplace, j'ai résolu mon problème.

// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
  // Make a working copy so we don't mutate the supplied date.
  const d = new Date(date);

  d.setUTCDate(d.getUTCDate() + num);

  return d;
}

8

Vous pouvez utiliser JavaScript, aucune jQuery requise:

var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd); 
Formatting to dd/mm/yyyy :

var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();

var someFormattedDate = dd + '/'+ mm + '/'+ y;

8

Prototype générique sans variable, il s'applique sur une valeur Date existante:

Date.prototype.addDays = function (days) {
    return new Date(this.valueOf() + days * 864e5);
}

7

Les documents mozilla pour setDate () n'indiquent pas qu'il gérera les scénarios de fin de mois. Voir https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

régler la date()

  • Définit le jour du mois (1-31) pour une date spécifiée en fonction de l'heure locale.

C'est pourquoi j'utilise setTime () lorsque j'ai besoin d'ajouter des jours.


Je voudrais
Blake Mills

1
Les " documents mozilla pour setDate () n'indiquent pas qu'il gérera les scénarios de fin de mois ". Les "documents" ont été mis à jour maintenant. ;-)
RobG

7

Aussi simple que cela:

new Date((new Date()).getTime() + (60*60*24*1000));

2
Bien que cela ajoute des jours UTC, il utilise des méthodes locales et n'autorise pas les jours locaux qui ne durent pas 24 heures, ce qui se produit lorsque le décalage du fuseau horaire change (par exemple, dans et hors de l'heure d'été).
RobG

6

Je suppose que je donnerai également une réponse:
Personnellement, j'aime essayer d'éviter la déclaration de variable gratuite, les appels de méthode et les appels de constructeur, car ils sont tous coûteux en performances. (dans des limites raisonnables, bien sûr)
J'allais laisser cela comme un simple commentaire sous la réponse donnée par @AnthonyWJones, mais j'y pensais mieux.

// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
    return this.setTime( 864E5 * days + this.valueOf() ) && this;
};

// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
    return date.setTime( 864E5 * days + date.valueOf() ) && date;
};

// Basic Function declaration...
function addDaysToDate( date, days ) {
    return date.setTime( 864E5 * days + date.valueOf() ) && date;
};

Ce qui précède respectera l'heure d'été. Cela signifie que si vous ajoutez un nombre de jours qui traversent l'heure d'été, l'heure affichée (heure) changera pour refléter cela.
Exemple:
le 2 novembre 2014, 02:00 était la fin de l'heure d'été.

var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt );                  // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 09:30:00

Si vous cherchez à conserver l'heure sur l'heure d'été (10h30 sera donc toujours 10h30) ...

// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
    return this.setDate( this.getDate() + days ) && this;
};

// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
    return date.setDate( date.getDate() + days ) && date;
};

// Basic Function declaration...
function addDaysToDate( date, days ) {
    return date.setDate( date.getDate() + days ) && date;
};

Alors maintenant, vous avez ...

var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt );                  // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 10:30:00

6

Non, javascript n'a pas de fonction intégrée, mais vous pouvez utiliser une simple ligne de code

timeObject.setDate(timeObject.getDate() + countOfDays);

5

J'utilise quelque chose comme:

new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)

Fonctionne avec gain de temps:

new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

Fonctionne avec la nouvelle année:

new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

Il peut être paramétré:

function DateAdd(source, amount, step) {
  var factor = 1;
  if (step == "day") factor = 24 * 60 * 60 * 1000;
  else if (step == "hour") factor = 60 * 60 * 1000;
  ...
  new Date(source.getTime() + amount * factor);
}

4

J'utilise la solution suivante.

var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);

Date a un constructeur qui accepte un int. Cet argument représente le total des millisecondes avant / après le 1er janvier 1970. Il a également une méthode setTime qui fait de même sans créer un nouvel objet Date.

Ce que nous faisons ici est de convertir les jours en millisecondes et d'ajouter cette valeur à la valeur fournie par getTime. Enfin, nous donnons le résultat au constructeur Date (millisecondes) ou à la méthode setTime (millisecondes).


Tous les jours n'ont pas 24h, il échoue pour l'heure d'été et les secondes intercalaires.
Stephan

Stephan, une autre bibliothèque explique-t-elle cela?
Vakhtang

now.setDate(now.getDate() + days);gère automatiquement les modifications DST. Et je dois corriger, les secondes intercalaires sont ignorées dans les horodatages JS.
Stephan

4

Edit: Au lieu de setTime()(ou setHours()) vous pouvez le faire de cette façon:

Date.prototype.addDays= function(d){
  this.setDate(this.getDate() + d);
  return this;
};

var tomorrow = new Date().addDays(1);

Vieux:

Au lieu d'utiliser, setTime()vous pouvez utiliser setHours():

Date.prototype.addDays= function(d){
    this.setHours(this.getHours() + d * 24);
    return this;
};

var tomorrow = new Date().addDays(1);

Voir le JSFiddle ...


suivant cette logique, vous pouvez également ajouter un jour;)d.setDate(d.getDate() + 1);
Rivenfall

4

Code très simple pour ajouter des jours en date dans le script java.

var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);


4

Il existe une méthode setDate et une méthode getDate , qui vous permettent de faire quelque chose comme ceci:

var newDate = aDate.setDate(aDate.getDate() + numberOfDays);

Si vous souhaitez à la fois soustraire un nombre de jours et formater votre date dans un format lisible par l'homme, vous devriez envisager de créer un DateHelperobjet personnalisé qui ressemble à ceci:

var DateHelper = {
    addDays : function(aDate, numberOfDays) {
        aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
        return aDate;                                  // Return the date
    },
    format : function format(date) {
        return [
           ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
           ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
           date.getFullYear()                          // Get full year
        ].join('/');                                   // Glue the pieces together
    }
}

// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));

(voir aussi ce violon )


4

L'extension du prototype en javascript peut ne pas être une bonne idée , en particulier dans les bases de code professionnelles.

Ce que vous voulez faire, c'est étendre la Dateclasse native :

class MyCustomDate extends Date {

  addDays(days) {
    const date = new MyCustomDate(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
  }
  
}

const today = new MyCustomDate();

const nextWeek = today.addDays(7)

console.log(nextWeek)

De cette façon, si un jour Javascript implémente une addDaysméthode native , vous ne casserez rien.

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.