Question Comment ajouter 30 minutes à un objet Date JavaScript?


Je voudrais obtenir un objet Date qui est 30 minutes plus tard qu'un autre objet Date. Comment puis-je le faire avec JavaScript?


584
2017-07-29 03:34


origine


Réponses:


Utiliser une bibliothèque

Si vous faites beaucoup de travail de date, vous voudrez peut-être regarder dans les bibliothèques de date JavaScript comme Datejs ou Moment.js. Par exemple, avec Moment.js, c'est simplement:

var newDateObj = moment(oldDateObj).add(30, 'm').toDate();

Vanilla Javascript

C'est comme la réponse du chaosmais en une ligne:

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

diff est la différence en minutes que vous voulez oldDateObjC'est l'heure. Cela peut même être négatif.

Ou comme une fonction réutilisable, si vous avez besoin de le faire à plusieurs endroits:

function addMinutes(date, minutes) {
    return new Date(date.getTime() + minutes*60000);
}

Attention à la vanille Javascript. Les dates sont difficiles!

Vous pensez peut-être que vous pouvez ajouter 24 heures à une date pour obtenir la date de demain, n'est-ce pas? Faux!

addMinutes(myDate, 60*24); //DO NOT DO THIS

Il s'avère que si l'utilisateur observe l'heure d'été, une journée n'est pas nécessairement de 24 heures. Il y a un jour par année qui ne dure que 23 heures et un jour par année qui dure 25 heures. Par exemple, dans la plupart des États-Unis et du Canada, 24 heures après minuit, le 2 novembre 2014 est toujours le 2 novembre:

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

C'est pourquoi en utilisant l'une des bibliothèques mentionnées ci-dessus est un pari plus sûr si vous devez faire beaucoup de travail avec ça.

Voici une version plus générique de cette fonction que j'ai écrite. Je recommande toujours d'utiliser une bibliothèque, mais cela peut être trop compliqué / impossible pour votre projet. La syntaxe est modélisée après MySQL DATE_ADD fonction.

/**
 * 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;
}

Démonstration de jsFiddle.


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



Peut-être quelque chose comme ça?

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

31
2017-07-29 03:39



Je crée toujours 7 fonctions, pour travailler avec la date dans JS: addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears.

Vous pouvez voir un exemple ici: http://jsfiddle.net/tiagoajacobi/YHA8x/

Comment utiliser:

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

Ce sont les fonctions:

        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



C'est ce que je fais qui semble bien fonctionner:

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

Ensuite, vous pouvez simplement appeler ceci comme ceci:

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

8
2017-10-15 12:54



La façon la plus simple de résoudre est de reconnaître que dans les dates javascript, il n'y a que des chiffres. Il commence 0 ou 'Wed Dec 31 1969 18:00:00 GMT-0600 (CST). Chaque 1 représente une milliseconde. Vous pouvez ajouter ou soustraire des millisecondes en obtenant la valeur et en instanciant une nouvelle date en utilisant cette valeur. Vous pouvez le gérer assez facilement avec cet esprit.

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



Voici la ES6 version:

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

Appelez ça comme:

getTimeAfter30Mins();

4
2018-04-13 11:47