Created
February 13, 2018 01:18
-
-
Save le-doude/dd5fb35f32522f2af9fef208b92fd4b2 to your computer and use it in GitHub Desktop.
This file contains 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
const RESOLUTIONS = [ | |
{text: 'year', short: 'y', get: (d) => d.getFullYear(), set: (d, v) => d.setFullYear(v) }, | |
{text: 'month', short: 'm', get: (d) => d.getMonth(), set: (d, v) => d.setMonth(v) }, | |
{text: 'day', short: 'd', get: (d) => d.getDate(), set: (d, v) => d.setDate(v) }, | |
{text: 'hour', short: 'h', get: (d) => d.getHours(), set: (d, v) => d.setHours(v) }, | |
{text: 'minute', short: 'mi', get: (d) => d.getMinutes(), set: (d, v) => d.setMinutes(v) } | |
]; | |
class DateHelper { | |
timeAgoInWords(date1, {brief, skip, limit} = {}) { | |
const d2 = new Date(); // now | |
const d1 = new Date(date1); | |
const hi = new Date(Math.max(d1, d2)); | |
const lo = new Date(Math.min(d1, d2)); | |
if(!Array.isArray(skip)){ | |
skip = [skip]; | |
} | |
const res = RESOLUTIONS.reduce(({r, rest}, curr) => { | |
if(skip.includes(curr.text) || skip.includes(curr.short)) { | |
return {r, rest}; | |
} | |
let diff = curr.get(rest) - curr.get(lo); | |
if(diff > 0) { | |
r.push(diff + (!!brief ? curr.short : curr.text)); | |
} | |
curr.set(rest, curr.get(lo)); | |
console.debug(curr.text, r, rest); | |
return {r, rest: rest}; | |
},{r: [], rest: hi}); | |
if(limit > 0) { | |
if(limit < res.r.length) { | |
return '~' + res.r.slice(0, limit).join(!!brief ? '': ' ') | |
} else { | |
return res.r.slice(0, limit).join(!!brief ? '': ' ') | |
} | |
} else { | |
return res.r.join(!!brief ? '': ' '); | |
} | |
} | |
} | |
const dateHelper = new DateHelper(); | |
export default dateHelper; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment