Your IP : 18.216.253.84
const calculateDelta = (now, date) => Math.round(Math.abs(now - date) / 1000)
export default function relativeDateFactory (translations) {
return function relativeDate (date, now = new Date()) {
if (!(date instanceof Date)) {
date = new Date(date)
}
let delta = null
const minute = 60
const hour = minute * 60
const day = hour * 24
const week = day * 7
const month = day * 30
const year = day * 365
delta = calculateDelta(now, date)
if (delta > day && delta < week) {
date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
delta = calculateDelta(now, date)
}
const translate = (translatePhrase, timeValue) => {
let key
if (translatePhrase === 'justNow') {
key = translatePhrase
} else if (now >= date) {
key = `${translatePhrase}Ago`
} else {
key = `${translatePhrase}FromNow`
}
const translation = translations[key]
if (typeof translation === 'function') {
return translation(timeValue)
}
return translation.replace('{{time}}', timeValue)
}
switch (false) {
case !(delta < 30):
return translate('justNow')
case !(delta < minute):
return translate('seconds', delta)
case !(delta < 2 * minute):
return translate('aMinute')
case !(delta < hour):
return translate('minutes', Math.floor(delta / minute))
case Math.floor(delta / hour) !== 1:
return translate('anHour')
case !(delta < day):
return translate('hours', Math.floor(delta / hour))
case !(delta < day * 2):
return translate('aDay')
case !(delta < week):
return translate('days', Math.floor(delta / day))
case Math.floor(delta / week) !== 1:
return translate('aWeek')
case !(delta < month):
return translate('weeks', Math.floor(delta / week))
case Math.floor(delta / month) !== 1:
return translate('aMonth')
case !(delta < year):
return translate('months', Math.floor(delta / month))
case Math.floor(delta / year) !== 1:
return translate('aYear')
default:
return translate('overAYear')
}
}
}