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?
Trois options pour vous:
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.)
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 = ...
.)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
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());
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);
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)
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 .
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)
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)
}
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);
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
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)
const date = moment (). add (14, "days"). toDate () // on ajoute ici 14 jours avec aujourd'hui
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
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();