import { i18n } from 'src/boot/i18n'; import { date as qdate, format } from 'quasar'; const { pad } = format; export function currency(val) { return typeof val === 'number' ? val.toFixed(2) + '€' : val; } export function date(val, format) { if (val == null) return val; if (!(val instanceof Date)) { val = new Date(val); } return qdate.formatDate(val, format, i18n.global.tm('date')); } export const formatDate = (timeStamp, format = 'YYYY-MM-DD') => { if (!timeStamp) return ''; const { messages, locale } = i18n.global; return qdate.formatDate(timeStamp, format, { days: messages.value[locale.value].date.days, months: messages.value[locale.value].date.months, daysShort: messages.value[locale.value].date.daysShort, monthsShort: messages.value[locale.value].date.monthsShort }); }; /** * @param {Date} timeStamp - La marca de tiempo que se va a formatear. Si no se proporciona, la función devolverá una cadena vacía. * @param {Object} options - Un objeto que contiene las opciones de formato. * @param {boolean} options.showTime - Indica si se debe mostrar la hora en el formato de la fecha. * @param {boolean} options.showSeconds - Indica si se deben mostrar los segundos en el formato de la hora. Solo se aplica si showTime es true. * @param {boolean} options.shortDay - Indica si se debe usar una versión corta del día (por ejemplo, "Mon" en lugar de "Monday"). * @returns {string} La fecha formateada como un título. */ export const formatDateTitle = ( timeStamp, options = { showTime: false, showSeconds: false, shortDay: false } ) => { if (!timeStamp) return ''; const { t } = i18n.global; const timeFormat = options.showTime ? options.showSeconds ? ` [${t('at')}] hh:mm:ss` : ` [${t('at')}] hh:mm` : ''; const day = options.shortDay ? 'dd' : 'dddd'; const formatString = `${day}, D [${t('of')}] MMMM [${t('of')}] YYYY${timeFormat}`; const formattedString = formatDate(timeStamp, formatString); return formattedString; }; export function relDate(val) { if (val == null) return val; if (!(val instanceof Date)) { val = new Date(val); } const 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.global.t(day); } else { if (dif > 0 && dif <= 7) { day = qdate.formatDate(val, 'ddd', i18n.global.tm('date')); } else { day = qdate.formatDate(val, 'ddd, MMMM Do', i18n.global.tm('date')); } } return day; } export 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'); } export function elapsedTime(val) { if (val == null) return val; if (!(val instanceof Date)) { val = new Date(val); } const now = new Date().getTime(); val = Math.floor((now - val.getTime()) / 1000); const hours = Math.floor(val / 3600); val -= hours * 3600; const minutes = Math.floor(val / 60); val -= minutes * 60; const seconds = val; return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}`; }