Este:
import {DateTime} from "luxon"; [ "2022-05-30T11:00:00Z", "2022-05-30T11:00:00+01:00", "2022-05-30T11:00:00-01:00", ].map(raw => { var sysTime = DateTime.fromISO(raw); var amPm = sysTime.hour < 12 ? "am" : "pm"; console.log(`${raw}: ${amPm}`); });emite esto:
2022-05-30T11:00:00Z: pm 2022-05-30T11:00:00+01:00: pm 2022-05-30T11:00:00-01:00: pmLo cual es claramente incorrecto.
Sí, está mal, porque 2022-05-30T11:00:00+01:00 no es pm en esa zona horaria .
Dado que Luxon almacena automáticamente SystemZone , debe convertirlo explícitamente a la zona horaria correcta, si sabe cuál es, por ejemplo:
[ "2022-05-30T11:00:00Z", "2022-05-30T11:00:00+01:00", "2022-05-30T11:00:00-01:00", ].map(raw => { var sysTime = DateTime.fromISO(raw); var realTime = sysTime.setZone('UTC+1'); // <---- explicit var amPm = realTime.hour < 12 ? "am" : "pm"; console.log(`${raw}: ${amPm}`); });emite esto:
2022-05-30T11:00:00Z: pm <---- still wrong 2022-05-30T11:00:00+01:00: am <--- correct 2022-05-30T11:00:00-01:00: pmEntonces, ¿cuál es la forma correcta de hacer esto?
... y para ser claros, no estoy tratando de analizar estos tiempos de fecha sin una zona horaria , estoy tratando de analizarlos de una manera que conserve la zona horaria "UTC+X" que está en la cadena de fecha sin procesar .
¿Es eso posible?
use: setZone: true en fromISO .
import {DateTime} from "luxon"; [ "2022-05-30T11:00:00Z", "2022-05-30T11:00:00+01:00", "2022-05-30T11:00:00-01:00", ].map(raw => { var sysTime = DateTime.fromISO(raw, {setZone: true}); var amPm = sysTime.hour < 12 ? "am" : "pm"; console.log(`${raw}: ${amPm}`); });