hedera-web/src/boot/filters.js

85 lines
1.8 KiB
JavaScript

import { date as qdate, format } from 'quasar'
const { pad } = format
export default async ({ app, Vue }) => {
let i18n = app.i18n
function currency (val) {
return typeof val === 'number' ? val.toFixed(2) + '€' : val
}
function date (val, format) {
if (val == null) return val
if (!(val instanceof Date)) {
val = new Date(val)
}
return qdate.formatDate(val, format, app.i18n.t('date'))
}
function relDate (val) {
if (val == null) return val
if (!(val instanceof Date)) {
val = new Date(val)
}
let dif = qdate.getDateDiff(new Date(), val, 'days')
let day
switch (dif) {
case 0:
day = 'today'
break
case 1:
day = 'yesterday'
break
case -1:
day = 'tomorrow'
break
}
if (day) {
day = i18n.t(day)
} else {
if (dif > 0 && dif <= 7) {
day = qdate.formatDate(val, 'ddd', i18n.t('date'))
} else {
day = qdate.formatDate(val, 'ddd, MMMM Do', i18n.t('date'))
}
}
return day
}
function relTime (val) {
if (val == null) return val
if (!(val instanceof Date)) {
val = new Date(val)
}
return relDate(val) + ' ' + qdate.formatDate(val, 'H:mm:ss')
}
function elapsedTime (val) {
if (val == null) return val
if (!(val instanceof Date)) {
val = new Date(val)
}
let now = (new Date()).getTime()
val = Math.floor((now - val.getTime()) / 1000)
let hours = Math.floor(val / 3600)
val -= hours * 3600
let minutes = Math.floor(val / 60)
val -= minutes * 60
let seconds = val
return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}`
}
Vue.filter('currency', currency)
Vue.filter('date', date)
Vue.filter('relDate', relDate)
Vue.filter('relTime', relTime)
Vue.filter('elapsedTime', elapsedTime)
}