mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-07-07 09:51:37 +00:00
37 lines
989 B
JavaScript
37 lines
989 B
JavaScript
// Wrap app.$formatDate to accept ISO strings / numbers safely
|
|
import Vue from 'vue'
|
|
import { parseISO, isValid } from 'date-fns'
|
|
import format from 'date-fns/format'
|
|
|
|
export default ({ app }) => {
|
|
const use = (impl) => (v, p) => {
|
|
let d = v instanceof Date ? v : null
|
|
if (!d && typeof v === 'string') {
|
|
const k = parseISO(v)
|
|
if (isValid(k)) d = k
|
|
}
|
|
if (!d && (typeof v === 'number' || typeof v === 'string')) {
|
|
const k = new Date(v)
|
|
if (isValid(k)) d = k
|
|
}
|
|
if (!d) return ''
|
|
try {
|
|
return impl(d, p)
|
|
} catch {
|
|
try {
|
|
return format(d, p || 'yyyy-MM-dd')
|
|
} catch {
|
|
return ''
|
|
}
|
|
}
|
|
}
|
|
if (typeof app.$formatDate === 'function') {
|
|
const safe = use((d, p) => app.$formatDate(d, p))
|
|
app.$formatDate = safe
|
|
Vue.prototype.$formatDate = safe
|
|
} else {
|
|
const safe = use((d, p) => format(d, p || 'yyyy-MM-dd'))
|
|
app.$formatDate = safe
|
|
Vue.prototype.$formatDate = safe
|
|
}
|
|
}
|