import {useI18n} from "vue-i18n"; export function time_ago(time) { const time_date = new Date(time) const now_date = new Date(Date.now()) const ago = now_date - time_date return internal_time_ago(ago) } function internal_time_ago(time) { switch (typeof time) { case 'number': break; case 'string': time = +new Date(time); break; case 'object': if (time.constructor === Date) time = time.getTime(); break; default: time = +new Date(); } const {t} = useI18n(); const time_formats = [ [60, t('time.seconds'), 1], // 60 [120, t('time.1minuteago'), t('time.1minutefromnow')], // 60*2 [3600, t('time.minutes'), 60], // 60*60, 60 [7200, t('time.1hourago'), t('time.1hourfromnow')], // 60*60*2 [86400, t('time.hours'), 3600], // 60*60*24, 60*60 [172800, t('time.yesterday'), t('time.tomorrow')], // 60*60*24*2 [604800, t('time.days'), 86400], // 60*60*24*7, 60*60*24 [1209600, t('time.lastweek'), t('time.nextweek')], // 60*60*24*7*4*2 [2419200, t('time.weeks'), 604800], // 60*60*24*7*4, 60*60*24*7 [4838400, t('time.lastmonth'), t('time.nextmonth')], // 60*60*24*7*4*2 [29030400, t('time.months'), 2419200], // 60*60*24*7*4*12, 60*60*24*7*4 [58060800, t('time.lastyear'), t('time.nextyear')], // 60*60*24*7*4*12*2 [2903040000, t('time.years'), 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12 [5806080000, t('time.lastcentury'), t('time.nextcentury')], // 60*60*24*7*4*12*100*2 [58060800000, t('time.centuries'), 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100 ]; let seconds = time / 1000 let token = t('time.ago') let list_choice = 1 if (seconds === 0) { return 'Just now' } if (seconds < 0) { seconds = Math.abs(seconds); token = 'from now'; list_choice = 2; } let i = 0, format; while (format = time_formats[i++]) if (seconds < format[0]) { if (typeof format[2] == 'string') return format[list_choice]; else return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token; } return time; }