diff --git a/apps/api/src/services/sat/sat-client.service.ts b/apps/api/src/services/sat/sat-client.service.ts index 01307b4..fe15c54 100644 --- a/apps/api/src/services/sat/sat-client.service.ts +++ b/apps/api/src/services/sat/sat-client.service.ts @@ -239,10 +239,23 @@ export async function downloadSatPackage( } /** - * Formatea una fecha para el SAT (YYYY-MM-DD HH:mm:ss) + * Formatea una fecha para el SAT (YYYY-MM-DD HH:mm:ss) en hora de México. + * El SAT opera en zona horaria America/Mexico_City (UTC-6 estándar). */ function formatDateForSat(date: Date): string { - const pad = (n: number) => n.toString().padStart(2, '0'); - return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ` + - `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`; + const pad = (n: string) => n.padStart(2, '0'); + const parts = new Intl.DateTimeFormat('en-US', { + timeZone: 'America/Mexico_City', + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: false, + }).formatToParts(date); + + const get = (type: string) => pad(parts.find(p => p.type === type)?.value || '00'); + + return `${get('year')}-${get('month')}-${get('day')} ${get('hour')}:${get('minute')}:${get('second')}`; }