import { useI18n } from "vue-i18n"; /** * @description Corta uma string em um determinado tamanho. * @param {string} string string a ser cortada. * @param {string} size tamanho da string. * @returns {string} string cortada. */ const excerpt = (string, size = 30) => { if (size == null) return string; if (string.length > size) { string = string.substring(0, size) + "..."; } return string; }; /** * @description Formata uma data de DD/MM/YYYY para YYYY-MM-DD * @param {string} date data. * @param {string} time tempo. * @throws {Error} Caso a data seja nula ou invalida. * @returns {string} data formatada. */ const formatDateDMYtoYMD = (date, time) => { if (!date) throw new Error(useI18n().t("validation.rules.required")); const testDate = /^([0-2][0-9]|(3)[0-1])(\/)(((0)[0-9])|((1)[0-2]))(\/)\d{4}$/; if (testDate.test(date) === false) throw new Error(useI18n().t("validation.rules.date")); const [day, month, year] = date.split("/"); return `${year}-${month}-${day} ${time ? time : ""}`; }; /** * @description Converte uma data e hora para o formato brasileiro. * @param {string} dateTimeString data e hora. * @returns {string} data e hora no formato brasileiro. * @throws {Error} Caso a data seja nula ou invalida. * @returns {string} data formatada. * @example * // convertDateTime("2023-05-23T13:07:27.000000Z"); * // Output: 23/05/2023 10:07:27 */ const convertDateTime = (dateTimeString) => { const dateTime = new Date(dateTimeString); const options = { timeZone: "America/Sao_Paulo", day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", second: "2-digit", }; const formattedDateTime = dateTime .toLocaleString("pt-BR", options) .replace(",", ""); return formattedDateTime; }; /** * @description Formata uma data de YYYY-MM-DD para DD/MM/YYYY * @param {string} dateTime data e hora. * @returns {string} data e hora no formato brasileiro. * @example * // formatDateYMDtoDMY("2023-05-23T13:07:27.000000Z"); * // Output: 23/05/2023 10:07:27 */ const formatDateYMDtoDMY = (dateTime) => { const [datePart, timePart] = dateTime.split(" "); const [year, month, day] = datePart.split("-"); const formattedDate = `${day}/${month}/${year}`; if (timePart) { const [hours, minutes, seconds] = timePart.split(":"); const formattedTime = `${hours}:${minutes}:${seconds}`; return `${formattedDate} ${formattedTime}`; } return formattedDate; }; /** * @description Formata a moeda. * @param {number} value valor. * @returns {string} valor formatado. */ const formatToBRLCurrency = (value) => { if (value != null) { value = parseFloat(value); return value.toLocaleString("pt-BR", { minimumFractionDigits: 2, style: "currency", currency: "BRL", }); } return value; }; const normalizeString = (val) => val .toLowerCase() .normalize("NFKD") .replace(/[\u0300-\u036f~]/g, ""); const formatPercentage = (value) => { if (value == null) return "\u2014"; return `${(value * 100).toFixed(0)}%`; }; export { formatDateDMYtoYMD, formatDateYMDtoDMY, excerpt, convertDateTime, formatToBRLCurrency, normalizeString, formatPercentage, };