Pregunta ¿Cómo agregar 30 minutos a un objeto Date de JavaScript?


Me gustaría obtener un objeto Date que es 30 minutos más tarde que otro objeto Date. ¿Cómo lo hago con JavaScript?


584
2017-07-29 03:34


origen


Respuestas:


Usando una biblioteca

Si está haciendo una gran cantidad de citas, es posible que desee buscar en las 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();

Vanilla Javascript

Esto es como la respuesta del caos, pero en una línea

var newDateObj = new Date(oldDateObj.getTime() + diff*60000);

Dónde diff es la diferencia en minutos que desea oldDateObjes 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);
}

Tenga cuidado con Vanilla Javascript. Las fechas son duras

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 es necesariamente de 24 horas. Hay un día al año que tiene solo 23 horas de duración y un día al año de 25 horas. Por ejemplo, en la mayoría de los Estados Unidos y Canadá, 24 horas después de la medianoche del 2 de noviembre de 2014, todavía es el 2 de noviembre:

addMinutes(new Date('2014-11-02'), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!

Esta es la razón por usar una de las bibliotecas antes mencionadas es una apuesta más segura si tienes que trabajar mucho con esto

A continuación hay una versión más genérica de esta función que escribí. Todavía recomendaría usar una biblioteca, pero puede ser exagerado / imposible para su proyecto. La sintaxis se modela después MySQL DATE_ADD función.

/**
 * 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) {
  var ret = new Date(date); //don't change original date
  var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
  switch(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;
}

Demostración jsFiddle de trabajo.


753
2017-07-31 20:36



var d1 = new Date (),
    d2 = new Date ( d1 );
d2.setMinutes ( d1.getMinutes() + 30 );
alert ( d2 );

178
2017-07-29 03:40



var newDateObj = new Date();
newDateObj.setTime(oldDateObj.getTime() + (30 * 60 * 1000));

126
2017-07-29 03:38



var now = new Date();
now.setMinutes(now.getMinutes() + 30);

63
2018-06-14 13:58



Tal vez algo como esto?

var d = new Date();
var v = new Date();
v.setMinutes(d.getMinutes()+30);

31
2017-07-29 03:39



Siempre creo 7 funciones, para trabajar con la fecha en JS: addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears.

Puedes ver un ejemplo aquí: http://jsfiddle.net/tiagoajacobi/YHA8x/

Cómo utilizar:

var now = new Date();
console.log(now.addMinutes(30));
console.log(now.addWeeks(3));

Estas son las funciones:

        Date.prototype.addSeconds = function(seconds) {
            this.setSeconds(this.getSeconds() + seconds);
            return this;
        };

        Date.prototype.addMinutes = function(minutes) {
            this.setMinutes(this.getMinutes() + minutes);
            return this;
        };

        Date.prototype.addHours = function(hours) {
            this.setHours(this.getHours() + hours);
            return this;
        };

        Date.prototype.addDays = function(days) {
            this.setDate(this.getDate() + days);
            return this;
        };

        Date.prototype.addWeeks = function(weeks) {
            this.addDays(weeks*7);
            return this;
        };

        Date.prototype.addMonths = function (months) {
            var dt = this.getDate();

            this.setMonth(this.getMonth() + months);
            var currDt = this.getDate();

            if (dt !== currDt) {  
                this.addDays(-currDt);
            }

            return this;
        };

        Date.prototype.addYears = function(years) {
            var dt = this.getDate();

            this.setFullYear(this.getFullYear() + years);

            var currDt = this.getDate();

            if (dt !== currDt) {  
                this.addDays(-currDt);
            }

            return this;
        };

27
2018-03-19 19:14



Esto es lo que hago, que parece funcionar bastante bien:

Date.prototype.addMinutes = function(minutes) {
    var copiedDate = new Date(this.getTime());
    return new Date(copiedDate.getTime() + minutes * 60000);
}

Entonces puedes simplemente llamar esto así:

var now = new Date();
console.log(now.addMinutes(50));

8
2017-10-15 12:54



La forma más fácil de resolver es reconocer que en javascript las fechas son solo números. Comienza 0 o 'Wed Dec 31 1969 18:00:00 GMT-0600 (CST). Cada 1 representa un milisegundo. Puede agregar o restar milisegundos obteniendo el valor y creando una nueva fecha utilizando ese valor. Puedes manejarlo bastante fácil con esa mente.

const minutesToAdjust = 10;
const millisecondsPerMinute = 60000;
const originalDate = new Date('11/20/2017 10:00 AM');
const modifiedDate1 = new Date(originalDate.valueOf() - (minutesToAdjust * millisecondsPerMinute));
const modifiedDate2 = new Date(originalDate.valueOf() + (minutesToAdjust * millisecondsPerMinute));

console.log(originalDate); // Mon Nov 20 2017 10:00:00 GMT-0600 (CST)
console.log(modifiedDate1); // Mon Nov 20 2017 09:50:00 GMT-0600 (CST)
console.log(modifiedDate2); // Mon Nov 20 2017 10:10:00 GMT-0600 (CST)

6
2017-11-20 16:18



Aquí está el ES6 versión:

let getTimeAfter30Mins = () => {
  let timeAfter30Mins = new Date();
  timeAfter30Mins = new Date(timeAfter30Mins.setMinutes(timeAfter30Mins.getMinutes() + 30));
};

Llámalo así:

getTimeAfter30Mins();

4
2018-04-13 11:47