UNPKG

@opengis/fastify-table

Version:

core-plugins

232 lines (231 loc) 8 kB
/* eslint-disable no-param-reassign */ const monthUa = { 0: "січня", 1: "лютого", 2: "березня", 3: "квітня", 4: "травня", 5: "червня", 6: "липня", 7: "серпня", 8: "вересня", 9: "жовтня", 10: "листопада", 11: "грудня", }; const monthRu = { 0: "января", 1: "февраля", 2: "марта", 3: "апреля", 4: "мая", 5: "июня", 6: "июля", 7: "авгувта", 8: "сентября", 9: "октября", 10: "ноября", 11: "декабря", }; const monthEn = { 0: "january", 1: "february", 2: "march", 3: "april", 4: "may", 5: "june", 6: "july", 7: "august", 8: "september", 9: "october", 10: "november", 11: "december", }; const weekDayUa = { 1: "Понеділок", 2: "Вівторок", 3: "Середа", 4: "Четвер", 5: "Пёятниця", 6: "Субота", 0: "Неділя", }; const mthShort = { ua: { 0: "Січ", 1: "Лют", 2: "Бер", 3: "Кві", 4: "Тра", 5: "Чер", 6: "Лип", 7: "Сер", 8: "Вер", 9: "Жов", 10: "Лис", 11: "Гру", }, ru: { 0: "Янв", 1: "Фев", 2: "Мар", 3: "Апр", 4: "Май", 5: "Июн", 6: "Июл", 7: "Авг", 8: "Сен", 9: "Окт", 10: "Ноя", 11: "Дек", }, }; const mth = { ua: { 0: "Січень", 1: "Лютий", 2: "Березень", 3: "Квітень", 4: "Травень", 5: "Червень", 6: "Липень", 7: "Серпень", 8: "Вересень", 9: "Жовтень", 10: "Листопад", 11: "Грудень", }, ru: { 0: "Январь", 1: "Февраль", 2: "Март", 3: "Апрель", 4: "Май", 5: "Июнь", 6: "Июль", 7: "Август", 8: "Сентябрь", 9: "Октябрь", 10: "Ноябрь", 11: "Декабрь", }, }; /** * Форматування дати. Є можливість обмеження точності. Є можливість зміщення дат і часу. Є можливість виведення дати на момент запиту. * * @summary Форматування дати за умовою і можливе зміщення дат і часу. Є можливість виведенння поточної дати через значення аргументу "0" * @priority 3 * @type helper * @tag format * @alias formatDate * @example * {{formatDate "2021-09-08T12:22:27.983" shift_year=1 format='mm - yy mw_ru'}} * @descr Виведення дати формату 09 - 2021 з назвою місяця російською мовою * @example * {{formatDate "2021-09-08T12:22:27.983" shift=1478 format='dd.MM.YY hh:mi:sec'}} * @descr Виведення дати із зсувом відносно "2021-09-08T12:22:27.983" на 5 діб (13.09.21 12:22:27) * @example * {{formatDate "2021-09-08T12:22:27.983" trunc='year' format='dd month yy hh:mi:sec'}} * @example * {{formatDate "2021-09-08T12:22:27.983" trunc='quarter' format='dd.MM.yy hh:mi:sec'}} * @example * {{formatDate "2021-09-08T12:22:27.983" format='dd.mm.yy hh:mi'}} * @descr Виведення дати формату 08.09.2021 12:22 * @example * {{formatDate 0}} * @descr Виведення поточної дати * @param {String} format Формат для вигляду при поверненні.Можливі значення: dd, mm, MM, month, mon, yy, YY, hh, mi, sec, mw_ua, mw_en, mw_ru, wd_ua * @param {Any} time Для вибору чи робити формат виводу години і хвилини, чи ні * @param {String} trunc Для вибору чи онуляти рік або квартал * @param {Number} shift_year Здвинути рік * @param {Number} shift_quarter Здвинути квартал * @param {Number} shift_month Здвинути місяць * @param {Number} shift_week Здвинути тиждень * @param {Number} shift Здвинути час * @param {Date|String} data Набір вхідних даних * @returns {String} Returns HTML */ export default function formatDate(data, options = {}) { if (typeof data === "object" && data === null) return ""; if (typeof data === "undefined") return ""; if (!data.toLocaleDateString && data && data.includes("T")) { data = new Date(data); } if ((!options.hash.format || options.hash.format === "dd.mm") && data && data.toLocaleDateString) { const time = options.hash.time ? `${data.getHours()}:${data.getMinutes()}` : ""; let m = data.getMonth() + 1; m = m < 10 ? `0${m}` : m; const dt = options.hash.format === "dd.mm" ? `${data.getDate()}.${m}` : `${data.getDate()}.${m}.${data.getFullYear()}`; return dt + (options.hash.time && time !== "00:00" ? ` ${time}` : ""); } let val = data; options.hash = options.hash || {}; if (typeof val === "string" && (val.match(/\./g) || []).length === 2 && val.length < 11) { val = val.replace(/(\d{2}).(\d{2}).(\d{4})/, "$2/$1/$3"); } try { val = val === 0 || val === "0" ? new Date() : new Date(val); } catch (e) { return val; } if (options.hash.trunc) { val = options.hash.trunc === "year" ? new Date(new Date(val.setMonth(0)).setDate(1)) : val; val = options.hash.trunc === "quarter" ? new Date(new Date(val.setMonth(val.getMonth() - (val.getMonth() % 3))).setDate(1)) : val; } if (options.hash.shift_year) { val = new Date(val.setYear(val.getFullYear() + (options.hash.shift_year - 0))); } if (options.hash.shift_quarter) { val = new Date(val.setMonth(val.getMonth() + (options.hash.shift_quarter - 0) * 3)); } if (options.hash.shift_month) { val = new Date(val.setMonth(val.getMonth() + (options.hash.shift_month - 0))); } if (options.hash.shift_week) { val = new Date(val.getTime() + (options.hash.shift_week - 0) * 86400 * 7 * 1000); } if (options.hash.shift) { val = new Date(val.getTime() + 86400000 * (options.hash.shift - 0)); } if (options.hash.shift_time) { val = new Date(val.getTime() + (options.hash.shift_time - 0)); } if (options.hash.format === "iso") return val.toISOString(); const opt1 = { dd: (val.getDate() < 10 ? "0" : "") + val.getDate(), mm: (val.getMonth() < 9 ? "0" : "") + (val.getMonth() + 1), MM: (val.getMonth() < 9 ? "0" : "") + (val.getMonth() + 1), month: (mth[options.data?.root?.lang || "ua"] || {})[val.getMonth()], mon: (mthShort[options.data && options.data.root && options.data.root.lang ? options.data.root.lang : "ua"] || {})[val.getMonth()], yy: val.getFullYear(), YY: `${val.getFullYear()}`.substr(-2), hh: (val.getHours() < 10 ? "0" : "") + val.getHours(), mi: (val.getMinutes() < 10 ? "0" : "") + val.getMinutes(), sec: (val.getSeconds() < 10 ? "0" : "") + val.getSeconds(), mw_ua: monthUa[val.getMonth()], mw_en: monthEn[val.getMonth()], mw_ru: monthRu[val.getMonth()], wd_ua: weekDayUa[val.getDay()], }; return Object.keys(opt1).reduce((prev, el) => prev.replace(el, opt1[el]), options.hash.format || "dd.mm.yy"); }