Utilisation d'une bibliothèque
Si vous faites beaucoup de travail sur les dates, vous voudrez peut-être regarder dans les bibliothèques de dates JavaScript comme Datejs ou Moment.js . Par exemple, avec Moment.js, c'est simplement:
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
Vanilla Javascript
C'est comme la réponse du chaos , mais en une seule ligne:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
Quelle diff
est la différence en minutes que vous voulez par rapport oldDateObj
au temps. Cela peut même être négatif.
Ou comme fonction réutilisable, si vous devez le faire à plusieurs endroits:
function addMinutes(date, minutes) {
return new Date(date.getTime() + minutes*60000);
}
Et juste au cas où cela ne serait pas évident, la raison pour laquelle nous multiplions les minutes 60000
est de convertir les minutes en millisecondes.
Soyez prudent avec Vanilla Javascript. Les dates sont difficiles!
Vous pensez peut-être que vous pouvez ajouter 24 heures à une date pour obtenir la date de demain, non? Faux!
addMinutes(myDate, 60*24); //DO NOT DO THIS
Il s'avère que si l'utilisateur observe l'heure d'été, une journée ne dure pas nécessairement 24 heures. Il y a un jour par an qui ne dure que 23 heures et un jour par an qui dure 25 heures. Par exemple, dans la plupart des États-Unis et du Canada, 24 heures après minuit, le 2 novembre 2014 est toujours le 2 novembre:
const NOV = 10; //because JS months are off by one...
addMinutes(new Date(2014, NOV, 2), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!
C'est pourquoi utiliser l'une des bibliothèques susmentionnées est un pari plus sûr si vous devez faire beaucoup de travail avec cela.
Voici une version plus générique de cette fonction que j'ai écrite. Je recommanderais toujours d'utiliser une bibliothèque, mais cela peut être excessif / impossible pour votre projet. La syntaxe est modélisée d'après la fonction MySQL DATE_ADD .
/**
* Adds time to a date. Modelled after MySQL DATE_ADD function.
* Example: dateAdd(new Date(), 'minute', 30) //returns 30 minutes from now.
* https://stackoverflow.com/a/1214753/18511
*
* @param date Date to start with
* @param interval One of: year, quarter, month, week, day, hour, minute, second
* @param units Number of units of the given interval to add.
*/
function dateAdd(date, interval, units) {
if(!(date instanceof Date))
return undefined;
var ret = new Date(date); //don't change original date
var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
switch(String(interval).toLowerCase()) {
case 'year' : ret.setFullYear(ret.getFullYear() + units); checkRollover(); break;
case 'quarter': ret.setMonth(ret.getMonth() + 3*units); checkRollover(); break;
case 'month' : ret.setMonth(ret.getMonth() + units); checkRollover(); break;
case 'week' : ret.setDate(ret.getDate() + 7*units); break;
case 'day' : ret.setDate(ret.getDate() + units); break;
case 'hour' : ret.setTime(ret.getTime() + units*3600000); break;
case 'minute' : ret.setTime(ret.getTime() + units*60000); break;
case 'second' : ret.setTime(ret.getTime() + units*1000); break;
default : ret = undefined; break;
}
return ret;
}
Démonstration de jsFiddle .