Add 'frontend/' from commit 'c070c0315d66a44154ab7d9f9ea6c211a15f4dba'
git-subtree-dir: frontend git-subtree-mainline:205a3bd14bgit-subtree-split:c070c0315d
This commit is contained in:
68
frontend/src/internal_time_ago.js
Normal file
68
frontend/src/internal_time_ago.js
Normal file
@@ -0,0 +1,68 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user