// dates.mjs export const z2 = n => String(n).padStart(2,'0'); export function toUTCms(isoDate, time) { const [Y,M,D] = isoDate.split('-').map(n=>parseInt(n,10)); const [h,m,s] = time.split(':').map(n=>parseInt(n,10)); return Date.UTC(Y, (M||1)-1, D||1, h||0, m||0, s||0); } export function fmtHMSUTC(ms){ const d = new Date(ms); const z = n => String(n).padStart(2,'0'); return `${z(d.getUTCHours())}:${z(d.getUTCMinutes())}:${z(d.getUTCSeconds())}`; } export const fmtHM = mins => { const h = Math.floor(mins/60); const m = Math.round(mins%60); return `${z2(h)}:${z2(m)}`; }; // "YY/MM/DD" o "YYYY/MM/DD" (o '-') -> "YYYY-MM-DD" export function normDateStr(s) { const m = String(s || '').trim().match(/^(\d{2,4})[\/\-](\d{1,2})[\/\-](\d{1,2})$/); if (!m) return null; let [_, y, mo, d] = m; let yy = parseInt(y, 10); if (y.length === 2) yy = 2000 + yy; const mm = parseInt(mo, 10), dd = parseInt(d, 10); if (!(mm >= 1 && mm <= 12 && dd >= 1 && dd <= 31)) return null; return `${yy}-${String(mm).padStart(2,'0')}-${String(dd).padStart(2,'0')}`; }