Usando una biblioteca
Si está haciendo mucho trabajo de fechas, es posible que desee buscar en bibliotecas de fechas de JavaScript como Datejs o Moment.js . Por ejemplo, con Moment.js, esto es simplemente:
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
Javascript vainilla
Esto es como la respuesta del caos , pero en una línea:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
¿Dónde diff
está la diferencia en minutos que quieres del oldDateObj
tiempo? Incluso puede ser negativo.
O como una función reutilizable, si necesita hacer esto en varios lugares:
function addMinutes(date, minutes) {
return new Date(date.getTime() + minutes*60000);
}
Y en caso de que esto no sea obvio, la razón por la que multiplicamos los minutos 60000
es para convertir los minutos a milisegundos.
Tenga cuidado con Javascript de vainilla. ¡Las fechas son difíciles!
Puede pensar que puede agregar 24 horas a una fecha para obtener la fecha de mañana, ¿verdad? ¡Incorrecto!
addMinutes(myDate, 60*24); //DO NOT DO THIS
Resulta que si el usuario observa el horario de verano, un día no necesariamente dura 24 horas. Hay un día al año que dura solo 23 horas y un día al año que dura 25 horas. Por ejemplo, en la mayoría de los Estados Unidos y Canadá, 24 horas después de la medianoche, el 2 de noviembre de 2014, todavía es el 2 de noviembre:
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!
Es por eso que usar una de las bibliotecas mencionadas anteriormente es una apuesta más segura si tiene que trabajar mucho con esto.
A continuación hay una versión más genérica de esta función que escribí. Todavía recomiendo usar una biblioteca, pero eso puede ser excesivo / imposible para su proyecto. La sintaxis se basa en la función 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;
}
Trabajando jsFiddle demo .