/** * Formata uma string no formato "YYYY-MM-DD HH:mm:ss" * para "DD/MM/YYYY" e "HH:mm". * * Inclui validação para entradas inválidas, nulas ou em formatos diferentes. */ export function formatDateTime(datetimeString: unknown) { // 1 Verifica se o valor foi fornecido if (!datetimeString) { return { formattedDate: '-', formattedTime: '-' }; } // 2 Converte para string de forma segura (caso venha como Date, número, etc.) const value = String(datetimeString).trim(); // 3 Se for uma string vazia, retorna padrão if (value.length === 0) { return { formattedDate: '-', formattedTime: '-' }; } // 4 Caso o valor seja uma data ISO (ex: "2025-11-09T12:30:00Z") // ou algo que o construtor Date entenda, tenta converter if (!value.includes(' ') && value.includes('T')) { const dateObj = new Date(value); if (!isNaN(dateObj.getTime())) { return { formattedDate: dateObj.toLocaleDateString('pt-BR'), formattedTime: dateObj.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' }) }; } } // 5 Tenta separar a data e a hora no formato esperado "YYYY-MM-DD HH:mm:ss" const parts = value.split(' '); if (parts.length < 1 || parts[0].split('-').length !== 3) { return { formattedDate: '-', formattedTime: '-' }; // formato inválido } const [datePart, timePart] = parts; const [year, month, day] = datePart.split('-'); // 6 Verifica se os componentes da data são válidos if (!year || !month || !day || year.length !== 4) { return { formattedDate: '-', formattedTime: '-' }; } // 7 Retorna a data e hora formatadas return { formattedDate: `${day}/${month}/${year}`, formattedTime: timePart ? timePart.substring(0, 5) : '-' }; }