25 lines
1.1 KiB
TypeScript
25 lines
1.1 KiB
TypeScript
|
|
/**
|
||
|
|
* Converts a datetime-local input value (local time, no timezone info)
|
||
|
|
* to a UTC ISO string for server submission.
|
||
|
|
*
|
||
|
|
* `datetime-local` inputs use the format "YYYY-MM-DDTHH:MM" and do NOT accept
|
||
|
|
* ISO strings with a timezone designator (e.g. "2026-03-11T17:00:00.000Z").
|
||
|
|
* Setting an ISO UTC string directly on a datetime-local input causes the browser
|
||
|
|
* to silently clear the field value. Use this function with a separate hidden input
|
||
|
|
* to hold the converted UTC value before form submission.
|
||
|
|
*
|
||
|
|
* Returns null when value is empty, nullish, or not a valid date.
|
||
|
|
*
|
||
|
|
* NOTE: The returned ISO string (e.g. "2026-03-11T17:00:00.000Z") is intentionally
|
||
|
|
* incompatible with datetime-local inputs, which only accept "YYYY-MM-DDTHH:MM".
|
||
|
|
* Setting a Z-suffixed string on a datetime-local input causes browsers to silently
|
||
|
|
* clear the field. Always write the result to a separate hidden input, not back to
|
||
|
|
* the datetime-local input itself.
|
||
|
|
*/
|
||
|
|
export function localDateTimeToUtcIso(value: string | null | undefined): string | null {
|
||
|
|
if (!value) return null;
|
||
|
|
const date = new Date(value);
|
||
|
|
if (isNaN(date.getTime())) return null;
|
||
|
|
return date.toISOString();
|
||
|
|
}
|