Usando uma biblioteca
Se você trabalha muito com datas, pode procurar em bibliotecas de datas JavaScript, como Datejs ou Moment.js . Por exemplo, com Moment.js, isso é simplesmente:
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
Javascript de baunilha
É como a resposta do caos , mas em uma linha:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
Onde diff
está a diferença em minutos que você deseja do oldDateObj
tempo. Pode até ser negativo.
Ou como uma função reutilizável, se você precisar fazer isso em vários locais:
function addMinutes(date, minutes) {
return new Date(date.getTime() + minutes*60000);
}
E, caso isso não seja óbvio, a razão pela qual multiplicamos minutos 60000
é converter minutos em milissegundos.
Cuidado com o Vanilla Javascript. As datas são difíceis!
Você pode adicionar 24 horas a uma data para obter a data de amanhã, certo? Errado!
addMinutes(myDate, 60*24); //DO NOT DO THIS
Acontece que, se o usuário observar o horário de verão, o dia não será necessariamente de 24 horas. Há um dia por ano com apenas 23 horas e um dia por ano com 25 horas. Por exemplo, na maioria dos Estados Unidos e Canadá, 24 horas após a meia-noite de 2 de novembro de 2014, ainda é 2 de novembro:
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!
É por isso que usar uma das bibliotecas mencionadas acima é uma aposta mais segura se você tiver que trabalhar muito com isso.
Abaixo está uma versão mais genérica dessa função que escrevi. Eu ainda recomendo usar uma biblioteca, mas isso pode ser um exagero / impossível para o seu projeto. A sintaxe é modelada após a função 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;
}
Trabalhando com a demonstração do jsFiddle .