I'd like to get a Date object which is 30 minutes later than another Date object. How do I do it with JavaScript?
To add minutes to a JavaScript Date object, use the setMinutes() method. Under that, get the current minutes and 30 minutes to it. JavaScript date setMinutes() method sets the minutes for a specified date according to local time.
JavaScript Date setMinutes() setMinutes() sets the minutes of a date. This method can also be used to set the seconds and milliseconds.
If you are doing a lot of date work, you may want to look into JavaScript date libraries like Datejs or Moment.js. For example, with Moment.js, this is simply:
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
This is like chaos's answer, but in one line:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
Where diff
is the difference in minutes you want from oldDateObj
's time. It can even be negative.
Or as a reusable function, if you need to do this in multiple places:
function addMinutes(date, minutes) { return new Date(date.getTime() + minutes*60000); }
And just in case this is not obvious, the reason we multiply minutes by 60000
is to convert minutes to milliseconds.
You may think you can add 24 hours to a date to get tomorrow's date, right? Wrong!
addMinutes(myDate, 60*24); //DO NOT DO THIS
It turns out, if the user observes daylight saving time, a day is not necessarily 24 hours long. There is one day a year that is only 23 hours long, and one day a year that is 25 hours long. For example, in most of the United States and Canada, 24 hours after midnight, Nov 2, 2014, is still Nov 2:
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!
This is why using one of the afore-mentioned libraries is a safer bet if you have to do a lot of work with this.
Below is a more generic version of this function that I wrote. I'd still recommend using a library, but that may be overkill/impossible for your project. The syntax is modeled after MySQL DATE_ADD function.
/** * 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; }
Working jsFiddle demo.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With