26 lines
947 B
TypeScript
26 lines
947 B
TypeScript
export function isoToSql(iso: string): string | null {
|
|
const date = new Date(iso);
|
|
if (Number.isNaN(date.getTime())) return null;
|
|
return date.toISOString().slice(0, 23).replace("T", " ");
|
|
}
|
|
|
|
export function sqlDateToIso(value: unknown): string | null {
|
|
if (value === null || value === undefined) return null;
|
|
if (value instanceof Date) {
|
|
if (Number.isNaN(value.getTime())) return null;
|
|
return value.toISOString();
|
|
}
|
|
const raw = String(value).trim();
|
|
if (!raw) return null;
|
|
if (/[zZ]$/.test(raw) || /[+-]\d{2}:?\d{2}$/.test(raw)) {
|
|
const date = new Date(raw);
|
|
if (Number.isNaN(date.getTime())) return null;
|
|
return date.toISOString();
|
|
}
|
|
const normalized = raw.includes("T") ? raw : raw.replace(" ", "T");
|
|
const withMs = /\.\d{1,3}$/.test(normalized) ? normalized : `${normalized}.000`;
|
|
const date = new Date(`${withMs}Z`);
|
|
if (Number.isNaN(date.getTime())) return null;
|
|
return date.toISOString();
|
|
}
|