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 diff
het 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 60000
is 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;
}
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 0
of 'Wed Dec 31 1969 18:00:00 GMT-0600 (CST)
. Elke 1
staat 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:
Intl
verstrekt - Tijdzones:
Intl
verstrekt
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:
Intl
verstrekt, 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 Date
objecten. Scroll voor meer informatie naar “Waarom date-fns?” op de startpagina van date-fns.
- Locales: aangepaste gegevensbestanden die afzonderlijk kunnen worden geïmporteerd
- Tijdzones:
Intl
geleverd, 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.time
pakket. 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 minutes
een cijfer
is
Antwoord 22
Gewoon een andere optie, die ik schreef:
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 momnet
Library:
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)