Verwenden einer Bibliothek
Wenn Sie viel Datumsarbeit leisten, sollten Sie sich JavaScript- Datumsbibliotheken wie Datejs oder Moment.js ansehen . Bei Moment.js ist dies beispielsweise einfach:
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
Vanille-Javascript
Dies ist wie die Antwort des Chaos , aber in einer Zeile:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
Wo diff
ist der Unterschied in Minuten, den Sie von oldDateObj
der Zeit möchten ? Es kann sogar negativ sein.
Oder als wiederverwendbare Funktion, wenn Sie dies an mehreren Stellen tun müssen:
function addMinutes(date, minutes) {
return new Date(date.getTime() + minutes*60000);
}
Und nur für den Fall, dass dies nicht offensichtlich ist, multiplizieren wir Minuten mit 60000
Minuten in Millisekunden.
Seien Sie vorsichtig mit Vanilla Javascript. Termine sind schwer!
Sie denken vielleicht, Sie können einem Datum 24 Stunden hinzufügen, um das Datum von morgen zu erhalten, oder? Falsch!
addMinutes(myDate, 60*24); //DO NOT DO THIS
Es stellt sich heraus, dass ein Tag nicht unbedingt 24 Stunden lang ist, wenn der Benutzer die Sommerzeit einhält. Es gibt einen Tag im Jahr, der nur 23 Stunden lang ist, und einen Tag im Jahr, der 25 Stunden lang ist. In den meisten USA und Kanada ist der 2. November 2014 24 Stunden nach Mitternacht noch der 2. November:
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!
Aus diesem Grund ist die Verwendung einer der oben genannten Bibliotheken sicherer, wenn Sie viel damit arbeiten müssen.
Unten ist eine allgemeinere Version dieser Funktion, die ich geschrieben habe. Ich würde immer noch empfehlen, eine Bibliothek zu verwenden, aber das kann für Ihr Projekt übertrieben / unmöglich sein. Die Syntax ist der MySQL DATE_ADD- Funktion nachempfunden .
/**
* 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;
}
Arbeitende jsFiddle-Demo .