66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
/**
|
|
* Utilitários para manipulação de datas no backend
|
|
* Resolve problemas de timezone ao trabalhar com datas no formato YYYY-MM-DD
|
|
*/
|
|
|
|
/**
|
|
* Converte uma string de data no formato YYYY-MM-DD para um objeto Date local
|
|
* No ambiente Convex, as datas são tratadas como UTC, então precisamos garantir
|
|
* que a data seja interpretada corretamente.
|
|
*
|
|
* @param dateString - String no formato YYYY-MM-DD
|
|
* @returns Date objeto representando a data
|
|
*
|
|
* @example
|
|
* parseLocalDate('2024-01-15') // Retorna Date para 15/01/2024
|
|
*/
|
|
export function parseLocalDate(dateString: string): Date {
|
|
if (!dateString || typeof dateString !== 'string') {
|
|
throw new Error('dateString deve ser uma string válida');
|
|
}
|
|
|
|
// Validar formato YYYY-MM-DD
|
|
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
|
|
if (!dateRegex.test(dateString)) {
|
|
throw new Error('dateString deve estar no formato YYYY-MM-DD');
|
|
}
|
|
|
|
// Extrair ano, mês e dia
|
|
const [year, month, day] = dateString.split('-').map(Number);
|
|
|
|
// No Convex, criar a data usando UTC para evitar problemas de timezone
|
|
// Usamos UTC para garantir consistência, mas mantemos a data correta
|
|
const date = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0));
|
|
|
|
// Validar se a data é válida
|
|
if (isNaN(date.getTime())) {
|
|
throw new Error(`Data inválida: ${dateString}`);
|
|
}
|
|
|
|
return date;
|
|
}
|
|
|
|
/**
|
|
* Formata uma data para o formato brasileiro (DD/MM/YYYY)
|
|
*
|
|
* @param date - Date objeto ou string no formato YYYY-MM-DD
|
|
* @returns String formatada no formato DD/MM/YYYY
|
|
*/
|
|
export function formatarDataBR(date: Date | string): string {
|
|
let dateObj: Date;
|
|
|
|
if (typeof date === 'string') {
|
|
dateObj = parseLocalDate(date);
|
|
} else {
|
|
dateObj = date;
|
|
}
|
|
|
|
// Usar UTC para garantir consistência
|
|
const day = dateObj.getUTCDate().toString().padStart(2, '0');
|
|
const month = (dateObj.getUTCMonth() + 1).toString().padStart(2, '0');
|
|
const year = dateObj.getUTCFullYear();
|
|
|
|
return `${day}/${month}/${year}`;
|
|
}
|
|
|