52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
/**
|
|
* 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) : '-'
|
|
};
|
|
}
|