Hoe voeg ik 30 minuten toe aan een JavaScript Date-object?

Ik wil graag een Date-object ontvangen dat 30 minuten later is dan een ander Date-object. Hoe doe ik dat met JavaScript?


Antwoord 1, autoriteit 100%

Een bibliotheek gebruiken

Als je veel datumwerk doet, wil je misschien JavaScript-datumbibliotheken bekijken zoals Datejsof Moment.js. Met Moment.js is dit bijvoorbeeld eenvoudig:

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

Vanille Javascript

Dit is als chaos’s antwoord, maar in één regel:

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

Waarbij diffhet verschil in minuten is dat je wilt met de tijd van oldDateObj. Het kan zelfs negatief zijn.

Of als een herbruikbare functie, als u dit op meerdere plaatsen moet doen:

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

En voor het geval dit niet duidelijk is, de reden dat we minuten vermenigvuldigen met 60000is om minuten om te zetten in milliseconden.

Wees voorzichtig met Vanilla Javascript. Datums zijn moeilijk!

Je denkt misschien dat je 24 uur aan een date kunt toevoegen om de datum van morgen te krijgen, toch? Fout!

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

Het blijkt dat als de gebruiker de zomertijd in acht neemt, een dag niet per se 24 uur hoeft te duren. Er is één dag per jaar die slechts 23 uur duurt en één dag per jaar 25 uur. In de meeste Verenigde Staten en Canada is het bijvoorbeeld 24 uur na middernacht, 2 november 2014, nog steeds 2 november:

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!

Daarom is het gebruik van een van de bovengenoemde bibliotheken een veiligere gokals je hier veel werk mee moet doen.

Hieronder staat een meer algemene versie van deze functie die ik heb geschreven. Ik zou nog steeds aanraden om een bibliotheek te gebruiken, maar dat kan overdreven/onmogelijk zijn voor uw project. De syntaxis is gemodelleerd naar MySQL DATE_ADD functie.

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

Werkende jsFiddle-demo.


Antwoord 2, autoriteit 27%

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

Antwoord 3, autoriteit 17%

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

Antwoord 4, autoriteit 11%

var now = new Date();
now.setMinutes(now.getMinutes() + 30); // timestamp
now = new Date(now); // Date object
console.log(now);

Antwoord 5, autoriteit 5%

Misschien zoiets?

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

Antwoord 6, autoriteit 5%

Ik maak altijd 7 functies om met datum in JS te werken:
addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears.

Je kunt hier een voorbeeld zien: http://jsfiddle.net/tiagoajacobi/YHA8x/

Hoe te gebruiken:

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

Dit zijn de functies:

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

Antwoord 7

De gemakkelijkste manier om op te lossen is om te herkennen dat datums in javascript slechts getallen zijn. Het begint 0of 'Wed Dec 31 1969 18:00:00 GMT-0600 (CST). Elke 1staat voor een milliseconde. U kunt milliseconden optellen of aftrekken door de waarde op te halen en een nieuwe datum te maken met die waarde. Met die geest kun je het vrij eenvoudig beheren.

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)

Antwoord 8

Dit is wat ik doe, wat best goed lijkt te werken:

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

Dan kun je dit gewoon zo noemen:

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

Antwoord 9

Stop met het gebruik van Moment.js

Zoals aanbevolen door andere geweldige antwoorden, is het in de meeste gevallen het beste om een bibliotheek te gebruiken bij het omgaan met datums. Het is echter belangrijk om te weten dat Moment.js vanaf september 2020 als verouderdwordt beschouwd en niet langer in nieuwe projecten mag worden gebruikt.

De verklaring van Moment citeren in hun officiële documenten:

We willen voorkomen dat Moment in de toekomst wordt gebruikt in nieuwe projecten. […] Over het algemeen beschouwen we Moment nu als een legacy-project in onderhoudsmodus. Het is niet dood, maar het is inderdaad klaar.

Moderne bibliotheken

Hieronder staan alternatieven aanbevolen door Moment.

Luxon

Luxon kan worden gezien als de evolutie van Moment. Het is geschreven door Isaac Cambron, een vaste medewerker van Moment. Lees a.u.b. Waarom bestaat Luxon?en de Voor Moment-gebruikerspagina’s in de Luxon-documentatie.

  • Locales: Intlverstrekt
  • Tijdzones: Intlverstrekt
import {DateTime} from 'luxon'
function addMinutes(date, minutes) {
    return DateTime.fromJSDate(date).plus({minutes}).toJSDate()
}

Day.js

Day.js is ontworpen als een minimalistische vervanging voor Moment.js, met behulp van een vergelijkbare API. Het is geen vervangende vervanging, maar als je gewend bent om Moment’s API te gebruiken en snel aan de slag wilt, overweeg dan om Day.js te gebruiken.

  • Locales: aangepaste gegevensbestanden die afzonderlijk kunnen worden geïmporteerd
  • Tijdzones: Intlverstrekt, via een plug-in
import dayjs from 'dayjs'
function addMinutes(date, minutes) {
    return dayjs(date).add(minutes, 'minutes').toDate()
}

date-fns

Date-fns biedt een reeks functies voor het manipuleren van JavaScript Dateobjecten. Scroll voor meer informatie naar “Waarom date-fns?” op de startpagina van date-fns.

  • Locales: aangepaste gegevensbestanden die afzonderlijk kunnen worden geïmporteerd
  • Tijdzones: Intlgeleverd, via een aparte begeleidende bibliotheek
import {addMinutes} from 'date-fns'
function addMinutesDemo(date, minutes) {
    return addMinutes(date, minutes)
}

js-Joda

js-Joda is een JavaScript-port van Java’s Three-Ten Backport, de basis voor JSR-310 implementatie van het Java SE 8 java.timepakket. Als u bekend bent met java.time, Joda-Timeof Noda Time, je zult js-Joda vergelijkbaar vinden.

  • Locales: aangepaste gegevensbestanden via add-on-module
  • Tijdzones: aangepaste gegevensbestanden via add-on-module
import {LocalDateTime, nativeJs, convert} from '@js-joda/core'
function addMinutes(date, minutes) {
    return convert(
        LocalDateTime.from(
            nativeJs(date)
        ).plusMinutes(minutes)
    ).toDate()
}

Antwoord 10

Je moet de waarde van de huidige datum krijgen om de datum met (ms) te krijgen en er (30 * 60 *1000) bij optellen. Nu heb je (huidige datum + 30 min) met ms

console.log('with ms', Date.now() + (30 * 60 * 1000))
console.log('new Date', new Date(Date.now() + (30 * 60 * 1000)))

Antwoord 11

het is simpel zoals het is;

let initial_date = new Date;
let added30Min = new Date(initial_date.getTime() + (30*60*1000));

Antwoord 12

Hier is de ES6-versie:

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

Noem het als:

getTimeAfter30Mins();

Antwoord 13

Hier is mijn oneliner:

console.log('time: ', new Date(new Date().valueOf() + 60000))

Antwoord 14

Ik heb het gevoel dat veel van de antwoorden hier een creatieve component missen, die hard nodig is voor berekeningen van tijdreizen. Ik presenteer mijn oplossing voor een tijdelijke vertaling van 30 minuten.

(jsfiddle hier)

function fluxCapacitor(n) {
    var delta,sigma=0,beta="ge";
    (function(K,z){
        (function(a,b,c){
            beta=beta+"tT";
            switch(b.shift()) {
                case'3':return z('0',a,c,b.shift(),1);
                case'0':return z('3',a,c,b.pop());
                case'5':return z('2',a,c,b[0],1);
                case'1':return z('4',a,c,b.shift());
                case'2':return z('5',a,c,b.pop());
                case'4':return z('1',a,c,b.pop(),1);
            }
        })(K.pop(),K.pop().split(''),K.pop());
    })(n.toString().split(':'),function(b,a,c,b1,gamma){
       delta=[c,b+b1,a];sigma+=gamma?3600000:0; 
       beta=beta+"im";
    });
    beta=beta+"e";
    return new Date (sigma+(new Date( delta.join(':')))[beta]());
}

Antwoord 15

Gebruik een bestaande bibliotheek waarvan bekend is dat deze omgaat met de eigenaardigheden van het omgaan met tijdberekeningen. Mijn huidige favoriet is moment.js.

<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js"></script>
<script>
 var now = moment(); // get "now"
 console.log(now.toDate()); // show original date
 var thirty = moment(now).add(30,"minutes"); // clone "now" object and add 30 minutes, taking into account weirdness like crossing DST boundries or leap-days, -minutes, -seconds.
 console.log(thirty.toDate()); // show new date
</script>

Antwoord 16

Je zou dit kunnen doen:

let thirtyMinutes = 30 * 60 * 1000; // convert 30 minutes to milliseconds
let date1 = new Date();
let date2 = new Date(date1.getTime() + thirtyMinutes);
console.log(date1);
console.log(date2);

Antwoord 17

Voor de luie mensen zoals ik:

Kip’s antwoord (van bovenaf) in coffeescript, met behulp van een “enum”, en werkend op hetzelfde object:

Date.UNIT =
  YEAR: 0
  QUARTER: 1
  MONTH: 2
  WEEK: 3
  DAY: 4
  HOUR: 5
  MINUTE: 6
  SECOND: 7
Date::add = (unit, quantity) ->
  switch unit
    when Date.UNIT.YEAR then @setFullYear(@getFullYear() + quantity)
    when Date.UNIT.QUARTER then @setMonth(@getMonth() + (3 * quantity))
    when Date.UNIT.MONTH then @setMonth(@getMonth() + quantity)
    when Date.UNIT.WEEK then @setDate(@getDate() + (7 * quantity))
    when Date.UNIT.DAY then @setDate(@getDate() + quantity)
    when Date.UNIT.HOUR then @setTime(@getTime() + (3600000 * quantity))
    when Date.UNIT.MINUTE then @setTime(@getTime() + (60000 * quantity))
    when Date.UNIT.SECOND then @setTime(@getTime() + (1000 * quantity))
    else throw new Error "Unrecognized unit provided"
  @ # for chaining

Antwoord 18

Ik weet dat het onderwerp veel te oud is. Maar ik ben er vrij zeker van dat er ontwikkelaars zijn die dit nog nodig hebben, dus ik heb dit eenvoudige script voor je gemaakt.
Ik hoop dat je ervan geniet!

Hallo terug, het is 2020 en ik heb wat aanpassingen gedaan, ik hoop dat het nu een stuk beter zal helpen!

function strtotime(date, addTime){
  let generatedTime=date.getTime();
  if(addTime.seconds) generatedTime+=1000*addTime.seconds; //check for additional seconds 
  if(addTime.minutes) generatedTime+=1000*60*addTime.minutes;//check for additional minutes 
  if(addTime.hours) generatedTime+=1000*60*60*addTime.hours;//check for additional hours 
  return new Date(generatedTime);
}
Date.prototype.strtotime = function(addTime){
  return strtotime(new Date(), addTime); 
}
let futureDate = new Date().strtotime({
    hours: 16, //Adding one hour
    minutes: 45, //Adding fourty five minutes
    seconds: 0 //Adding 0 seconds return to not adding any second so  we can remove it.
});
<button onclick="console.log(futureDate)">Travel to the future</button>

Antwoord 19

Hier is de isOSPRING-versie:

console.log(new Date(new Date().setMinutes(new Date().getMinutes() - (30))).toISOString());

Antwoord 20

Other-oplossing:

var dateAv = new Date();
var endTime = new Date(dateAv.getFullYear(), dateAv.getMonth(), dateAv.getDate(), dateAv.getHours(), dateAv.getMinutes() + 30);

Antwoord 21

One Line Code

 var afterSomeMinutes = new Date(new Date().getTime() + minutes * 60000);

waar minuteseen cijfer

is


Antwoord 22

Gewoon een andere optie, die ik schreef:

DP_DATEXTSSIENSIONSBIBRIEREN

Het is overkill als dit de verwerking van de datum is die u nodig hebt, maar het zal doen wat u wilt.

Ondersteunt datum / tijdopmaak, datum wiskunde (Toevoegen / aftrekken DATUM onderdelen), datum Vergelijk, datum parseren, enz. Het is royaal geopend.


Antwoord 23

var add_minutes =  function (dt, minutes) {
return new Date(dt.getTime() + minutes*60000);
}
 console.log(add_minutes(new Date(2014,10,2), 30).toString());

Antwoord 24

Simply u kunt deze code gebruiken met momnetLibrary:

console.log(moment(moment()).add(30,"minutes").format('MM/DD/YYYY hh:mm:ss'));

Antwoord 25

var myDate= new Date();
var MyNewDate = new Date 
(myDate.getFullYear(),myDate.getMonth(),myDate.getDate(),myDate.getMinutes()+10,01,01)

Other episodes