J'ai besoin d'incrémenter une valeur de date d'un jour en JavaScript.
Par exemple, j'ai une valeur de date 2010-09-11 et j'ai besoin de stocker la date du lendemain dans une variable JavaScript.
Comment incrémenter une date d'un jour?
J'ai besoin d'incrémenter une valeur de date d'un jour en JavaScript.
Par exemple, j'ai une valeur de date 2010-09-11 et j'ai besoin de stocker la date du lendemain dans une variable JavaScript.
Comment incrémenter une date d'un jour?
Réponses:
Trois options pour vous:
Date
objet JavaScript (pas de bibliothèques):Ma réponse précédente pour # 1 était fausse (elle a ajouté 24 heures, ne tenant pas compte des transitions vers et depuis l'heure d'été; Clever Human a souligné qu'elle échouerait avec le 7 novembre 2010 dans le fuseau horaire de l'Est). Au lieu de cela, la réponse de Jigar est la bonne façon de le faire 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 survol:
(Cette réponse est actuellement acceptée, je ne peux donc pas la supprimer. Avant qu'elle ne soit acceptée, j'ai suggéré au PO d'accepter les Jigar, mais peut-être ont-ils accepté celle-ci pour les éléments n ° 2 ou n ° 3 de la liste.)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Méfiez-vous qui add
modifie l'instance sur laquelle vous l'appelez, plutôt que de renvoyer une nouvelle instance, donc la today.add(1, 'days')
modifierait today
. C'est pourquoi nous commençons par une opération de clonage activée var tomorrow = ...
.)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Date
constructeur ( new Date(year, month, date)
); voir la section 15.9.2.1 de la spécification ; si vous souhaitez accepter une gamme de formats, jetez un coup d'œil à DateJS .
Date.parse
(ce qui renvoie un certain nombre de millisecondes que vous pouvez ensuite alimenter new Date(ms)
). Mais attention, cela peut varier d'un navigateur à l'autre. Jusqu'à récemment, les implémentations pouvaient faire à peu près tout ce qu'elles voulaient Date.parse
. La nouvelle spécification de la 5e édition a maintenant un format minimum qui doit être accepté, mais je ne compterais pas encore là-dessus.
x = new Date(); x2 = new Date(x.getTime() + 1000)
, où 1000 est un incrément de milliseconde.
Date
les objets sont mutables. Vous stockez le même Date
objet trois fois dans le tableau. Si vous voulez trois Date
objets différents , vous devez créer trois objets:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
new Date("2009-09-11")
mais Firefox ne le fait pas. Je pense que la plupart des navigateurs acceptent new Date("2009/09/11")
une solution simple var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.
-
par /
et en espérant que les navigateurs l'accepteront, serait de diviser la chaîne en parties: var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
Notez que nous utilisons m-1
ici, car les mois javascript sont des valeurs énumérées (janvier étant 0, pas 1), et d+1
parce que nous fais l'incrémentation déjà dans l'affectation initiale (cela corrigera automatiquement le 29 février, etc.)
Aucun des exemples de cette réponse ne semble fonctionner avec les jours d'ajustement de l'heure d'été. Ces jours-là, le nombre d'heures dans une journée n'est pas de 24 (ils sont de 23 ou 25, selon que vous «sautez en avant» ou «reculez».)
La fonction javascript AddDays ci-dessous représente l'heure d'été:
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());
Le moyen le plus simple est de convertir en millisecondes et d'ajouter 1000 * 60 * 60 * 24 millisecondes, par exemple:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
mais c'est vraiment similaire à getTime()
/ setTime()
, vraiment.
new Date(Date.now()+1000*60*60*24);
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 le souhaitez à nouveau 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 .
Je pense que rien n'est plus sûr .getTime()
et .setTime()
, donc ce devrait être le meilleur, et aussi performant.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
pour une date invalide (comme 31 + 1) est trop dangereux et cela dépend de l'implémentation du navigateur.
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)
}
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)
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 Découpez la date à partir du retour puis incrémentez 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
Je ne sais pas exactement s'il s'agit d'un BUG (testé 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
L'ajout d'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 () et 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();
Incrémentation de l'année de la date 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 autre valeur que la date (jour)
Via JS natif, pour ajouter un jour, vous pouvez faire ce qui suit:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Une autre option consiste à utiliser la moment
bibliothèque:
const date = moment().add(14, "days").toDate()
Incrément de date prenant en compte le fuseau horaire / l'heure d'été pour les dates JavaScript:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}