Skip to content

Instantly share code, notes, and snippets.

@Jainam2130
Forked from dominikbulaj/time_manipulation.js
Created April 29, 2023 15:12
Show Gist options
  • Save Jainam2130/df27fff5409c541b436c71b29603a514 to your computer and use it in GitHub Desktop.
Save Jainam2130/df27fff5409c541b436c71b29603a514 to your computer and use it in GitHub Desktop.
Add or remove time from given date. Examples: getNewTime('7 days') // return current time + 7 days getNewTime('-1 month') // return past time (last month)
/**
* Add (or remove) some time from current date. Returns new Date
*
* @param {string} elapsedTime
* @param {Date|null} dateObject
* @returns {Date}
* @private
*/
function getNewTime(elapsedTime, dateObject) {
var newDate = new Date();
// no dateObjecy
switch (typeof dateObject) {
case 'undefined': // no action - newDate already defined
break;
case 'number':
newDate = new Date(dateObject);
break;
case 'string':
newDate = new Date(dateObject);
break;
}
var elapsedTimeParts = elapsedTime.match(/^(\-?\s*\d+)\s+(hours?|days?|months?)$/);
if (elapsedTimeParts) { // must be valid format
var timeDiff = parseInt(elapsedTimeParts[1].replace(/\s+/, ''), 10);
switch (elapsedTimeParts[2]) {
case 'hour':
case 'hours':
newDate.setHours(newDate.getHours() + timeDiff);
break;
case 'days':
case 'day':
newDate.setDate(newDate.getDate() + timeDiff);
break;
case 'month':
case 'months':
newDate.setMonth(newDate.getMonth() + timeDiff);
break;
}
}
return newDate;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment