feat: enhance pedimento date validation and update date handling in forms

This commit is contained in:
AlexeerCT
2026-01-07 16:50:20 -06:00
parent d83c289276
commit 182f472370
5 changed files with 180 additions and 125 deletions

View File

@@ -0,0 +1,75 @@
import {
getLocalTimeZone,
parseDate,
parseTime,
toCalendarDateTime,
fromDate,
now,
today
} from '@internationalized/date';
const localTimeZone = getLocalTimeZone();
/**
* Convierte fecha local (string input YYYY-MM-DD) + hora (HH:MM) a UTC ISO string.
* Útil para enviar datos al backend que espera timestamps absolutos.
*/
export function prepareDateForBackend(dateStr: string, timeStr: string = '00:00'): string | null {
if (!dateStr) return null;
try {
const date = parseDate(dateStr);
const time = parseTime(timeStr);
// Combinar fecha y hora usando la zona horaria local
const dateTime = toCalendarDateTime(date, time);
const zonedDateTime = dateTime.toDate(localTimeZone);
return zonedDateTime.toISOString();
} catch (e) {
console.error('Error parsing date:', e);
return null;
}
}
/**
* Convertir fechas que vienen del servidor (ISO UTC) a fecha local del calendario (YYYY-MM-DD string).
* Útil para poblar inputs type="date".
*/
export function loadServerDate(isoStr: string | null | undefined): string {
if (!isoStr) return '';
try {
// Si incluye T es ISO completo, convertir a zona local
if (isoStr.includes('T')) {
const dateObj = new Date(isoStr);
return fromDate(dateObj, localTimeZone).toString();
}
// Si no, asumir fecha plana YYYY-MM-DD
return isoStr.substring(0, 10);
} catch {
return isoStr || '';
}
}
/**
* Sumar días de forma segura con calendario y devolver string YYYY-MM-DD.
*/
export function addDaysLocal(dateStr: string, days: number): string {
if (!dateStr) return '';
try {
return parseDate(dateStr).add({ days }).toString();
} catch {
return '';
}
}
export function getCurrentLocalYear(): string {
const nowZoned = now(localTimeZone);
return String(nowZoned.year).slice(-2);
}
export function getCurrentLocalDate(): string {
return today(localTimeZone).toString();
}
export function getCurrentLocalTime(): string {
const nowZoned = now(localTimeZone);
return `${String(nowZoned.hour).padStart(2, '0')}:${String(nowZoned.minute).padStart(2, '0')}`;
}