-
-
Save tamirazrab/1021720b77a7448c72a7de72592f0d1e to your computer and use it in GitHub Desktop.
π€ dateDiff() - returns a detail object about the difference between two dates
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * β dateDiff "Snowman Carl" (http://stackoverflow.com/questions/13903897) | |
| * Returns a detail object about the difference between two dates | |
| * | |
| * When providing custom units, provide them in descending order (eg week,day,hour; not hour,day,week) | |
| * | |
| * @param {Date} dateStart - date to compare to | |
| * @param {Date|string} [dateEnd=new Date()] - second date, can be used as unit param instead | |
| * @param {...string} [units=Object.keys(dateDiffDef)] - limits the returned object to provided keys | |
| */ | |
| export function dateDiff( | |
| dateStart: Date, | |
| dateEnd: Date | string = new Date, | |
| ...units: string[] | |
| ): { | |
| [key: string]: number | |
| } { | |
| if(typeof dateEnd === 'string') | |
| dateEnd = new Date(); | |
| let delta: number = Math.abs(dateStart.getTime() - dateEnd.getTime()); | |
| return (units.length ? units : Object.keys(dateDiffDef)) | |
| .reduce((res: object, key: string) => { | |
| if(!dateDiffDef.hasOwnProperty(key)) | |
| throw new Error('Unknown unit in dateDiff: '+key); | |
| res[key] = Math.floor(delta / dateDiffDef[key]); | |
| delta -= res[key] * dateDiffDef[key]; | |
| return res; | |
| }, {}); | |
| } | |
| // default time units for dateDiff | |
| export const dateDiffDef = { | |
| millennium: 31536000000000, | |
| century: 3153600000000, | |
| decade: 315360000000, | |
| year: 31536000000, | |
| quarter: 7776000000, | |
| month: 2592000000, | |
| week: 604800000, | |
| day: 86400000, | |
| hour: 3600000, | |
| minute: 60000, | |
| second: 1000, | |
| millisecond: 1 | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment