Korzystanie z biblioteki
Jeśli wykonujesz dużo pracy związanej z datami, możesz zajrzeć do bibliotek dat JavaScript, takich jak Datejs lub Moment.js . Na przykład w przypadku Moment.js jest to po prostu:
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
Waniliowy Javascript
To odpowiedź chaosu , ale w jednym wierszu:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
Gdzie diff
jest różnica w minutach, którą chcesz od oldDateObj
czasu. Może być nawet negatywny.
Lub jako funkcja wielokrotnego użytku, jeśli musisz to zrobić w wielu miejscach:
function addMinutes(date, minutes) {
return new Date(date.getTime() + minutes*60000);
}
I na wypadek, gdyby nie było to oczywiste, mnożymy minuty przez 60000
konwersję minut na milisekundy.
Uważaj na Vanilla Javascript. Daty są trudne!
Możesz pomyśleć, że możesz dodać 24 godziny do daty, aby uzyskać jutrzejszą datę, prawda? Źle!
addMinutes(myDate, 60*24); //DO NOT DO THIS
Okazuje się, że jeśli użytkownik zauważy czas letni, dzień niekoniecznie musi trwać 24 godziny. Jest jeden dzień w roku, który ma tylko 23 godziny, i jeden dzień w roku, który ma 25 godzin. Na przykład w większości Stanów Zjednoczonych i Kanady, 24 godziny po północy, 2 listopada 2014 r., Wciąż jest 2 listopada:
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!
Dlatego korzystanie z jednej z wyżej wymienionych bibliotek jest bezpieczniejszym wyborem, jeśli musisz dużo z tym zrobić.
Poniżej znajduje się bardziej ogólna wersja tej funkcji, którą napisałem. Nadal polecam korzystanie z biblioteki, ale może to być przesada / niemożliwe dla twojego projektu. Składnia jest modelowana na podstawie funkcji 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;
}
Działające demo jsFiddle .