web-dev-qa-db-fra.com

Incrémenter une date en JavaScript

J'ai besoin d'incrémenter une date d'un jour en JavaScript.

Par exemple, j'ai une valeur de date 2010-09-11 et je dois stocker la date du lendemain dans une variable JavaScript.

Comment puis-je incrémenter une date d'un jour?

322
Santanu

Trois options pour vous:

1. En utilisant uniquement l'objet Date de JavaScript (pas de bibliothèques):

Ma réponse précédente pour le numéro 1 était fausse (elle a ajouté 24 heures, sans tenir compte des transitions vers et à partir de l'heure d'été; Clever Human a souligné que cela échouerait avec le 7 novembre 2010 dans le fuseau horaire Est). Au lieu de cela, la réponse de Jigar est la bonne façon de faire cela sans bibliothèque:

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

Cela fonctionne même pour le dernier jour d'un mois (ou d'une année), car l'objet de date JavaScript est intelligent pour le basculement:

var lastDayOf2015 = new Date(2015, 11, 31);
snippet.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
snippet.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
snippet.log("Resulting date: " + nextDay.toISOString());
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

(Cette réponse est actuellement acceptée, je ne peux donc pas la supprimer. Avant de l'accepter, j'ai suggéré aux OP d'accepter celle de Jigar, mais ils ont peut-être accepté celle-ci pour les éléments nos 2 ou 3 de la liste.)

2. Utilisation de MomentJS :

var today = moment();
var tomorrow = moment(today).add(1, 'days');

(Attention, add modifie l'instance sur laquelle vous l'appelez, plutôt que de renvoyer une nouvelle instance, de sorte que today.add(1, 'days') modifierait today. C'est pourquoi nous commençons par une opération de clonage sur var tomorrow = ....)

3. Utilisation de DateJS , mais il n’a pas été mis à jour depuis longtemps:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
607
T.J. Crowder
var myDate = new Date();

//add a day to the date
myDate.setDate(myDate.getDate() + 1);
147
Jigar Joshi

Aucun des exemples de cette réponse ne semble fonctionner avec les jours de réglage de l'heure d'été. Ces jours-là, le nombre d'heures dans une journée n'est pas de 24 (ils sont 23 ou 25, selon que vous "sautez en avant" ou "reculez".)

La fonction javascript AddDays ci-dessous explique l’heure avancée:

function addDays(date, amount) {
  var tzOff = date.getTimezoneOffset() * 60 * 1000,
      t = date.getTime(),
      d = new Date(),
      tzOff2;

  t += (1000 * 60 * 60 * 24) * amount;
  d.setTime(t);

  tzOff2 = d.getTimezoneOffset() * 60 * 1000;
  if (tzOff != tzOff2) {
    var diff = tzOff2 - tzOff;
    t += diff;
    d.setTime(t);
  }

  return d;
}

Voici les tests que j'ai utilisés pour tester la fonction:

    var d = new Date(2010,10,7);
    var d2 = AddDays(d, 1);
    document.write(d.toString() + "<br />" + d2.toString());

    d = new Date(2010,10,8);
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, 1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());
29
Clever Human

La méthode la plus simple consiste à convertir en millisecondes et à ajouter 1000 * 60 * 60 * 24 millisecondes, par exemple:

var tomorrow = new Date(today.getTime()+1000*60*60*24);
20
Sylvain Lecorné

Demain en une ligne en pure JS mais c'est moche !

new Date(new Date().setDate(new Date().getDate() + 1))

Voici le résultat: 

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
12
jpmottin

Vous devez d'abord analyser votre chaîne avant de suivre la suggestion des autres:

var dateString = "2010-09-11";
var myDate = new Date(dateString);

//add a day to the date
myDate.setDate(myDate.getDate() + 1);

Si vous voulez le récupérer dans le même format, vous devrez le faire "manuellement":

var y = myDate.getFullYear(),
    m = myDate.getMonth() + 1, // january is month 0 in javascript
    d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");

Mais je suggère d’obtenir Date.js comme mentionné dans d’autres réponses, cela vous aidera beaucoup .

11
einarmagnus

Deux méthodes: 

1:

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)

2: similaire à la méthode précédente

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
2
Laksh Goel

Obtenir les 5 prochains jours:

var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();


for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
2
fitodac

Obtenez la valeur de chaîne de la date à l'aide de la méthode dateObj.toJSON (). Réf: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON .__ Séparez la date de la valeur renvoyée, puis incrémentez-vous du nombre de jours souhaité.

var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
1
phil
 Date.prototype.AddDays = function (days) {
    days = parseInt(days, 10);
    return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}

Exemple

var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));

Résultat

2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
0
swirekx

Année incrémentée avec Vanilla js:

start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020

Juste au cas où quelqu'un voudrait incrémenter une valeur autre que la date (jour)

0
d1jhoni1b

const date = moment (). add (14, "days"). toDate () // on ajoute ici 14 jours avec aujourd'hui

0
Kiran Debnath

Pas tout à fait sûr s'il s'agit d'un bogue (testé sur Firefox 32.0.3 et Chrome 38.0.2125.101), mais le code suivant échouera sur le Brésil (-3 GMT):

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

$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");

Résultat:

Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200

Ajouter une heure à la date, le fera fonctionner parfaitement (mais ne résout pas le problème).

$date = new Date(2014, 9, 16,0,1,1);

Résultat:

Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
0
Alan Weiss

Résultats dans une représentation sous forme de chaîne de la date de demain. Utilisez new Date () pour obtenir la date du jour en ajoutant un jour à l'aide de Date.getDate () et Date.setDate (), puis en convertissant l'objet Date en chaîne.

  const tomorrow = () => {
      let t = new Date();
      t.setDate(t.getDate() + 1);
      return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
        t.getDate()
      ).padStart(2, '0')}`;
    };
    tomorrow();
0
Gor