La nueva propuesta Temporal de ECMAScript define (¡por fin!) una API moderna para manejar fechas y horas en JS, incluida la aritmética segura para la zona horaria y los calendarios no gregorianos.
Sé que puedo usar cadenas ISO 8601 o RFC 3339 con Temporal . Si tengo datos de cadena que quiero analizar en un objeto de fecha/hora JS, ¿qué tipo temporal debo usar?
Para determinar la clase Temporal que debe usarse para analizar una cadena, es importante elegir el tipo cuyo modelo de datos coincida con los datos de la cadena.
Temporal.Instant representa una hora exacta. Su modelo de datos es el número de nanosegundos enteros desde el 1 de enero de 1970 UTC. Este tipo no reconoce las zonas horarias y no proporciona una forma de acceder a las unidades de calendario/reloj como el mes o la hora. Es solo una marca de tiempo.Temporal.ZonedDateTime representa una hora exacta desde la perspectiva de una zona horaria específica. Su modelo de datos es una marca de tiempo (como Temporal.Instant ), una zona horaria (generalmente una zona IANA) y un calendario. La zona horaria es necesaria porque este tipo Temporal (y solo este tipo) permite la creación segura de DST de valores derivados. Cuando agrega 1 día a una instancia de Temporal.ZonedDateTime , la hora exacta generalmente será 24 horas más tarde, pero puede ser 23 o 25 si la adición cruzó una transición de horario de verano.Temporal.PlainDate representa una fecha sin zona horaria: una fecha local sin hora y sin ninguna referencia a la zona horaria. Su modelo de datos es un año/mes/día y un calendario.Temporal.PlainMonthDay representa un cumpleaños, aniversario u otro evento recurrente. Su modelo de datos es un mes, un día y un calendario.Temporal.PlainYearMonth representa un mes en un año específico, por ejemplo, enero de 2022. Su modelo de datos es un año, un mes y un calendario.Temporal.PlainTime representa una hora del día sin zona horaria: una hora local sin referencia a fecha, zona horaria o calendario. Su modelo de datos es una hora/minuto/segundo, con una resolución de segundos de hasta 9 dígitos decimales (nanosegundos).Temporal.PlainDateTime representa una fecha y hora local sin ninguna referencia a la zona horaria. Su modelo de datos es año/mes/día/hora/minuto/segundo y un calendario. Este tipo rara vez se usa, porque los tipos anteriores cubren la mayoría de los casos de uso. Si solo le importa la marca de tiempo exacta y no le importan las zonas horarias, use Temporal.Instant . Si solo le importa la fecha local, use Temporal.PlainDate . Si le importa la hora exacta y la zona horaria, use Temporal.ZonedDateTime . Aparte de los pocos casos de uso detallados en la documentación de Temporal.PlainDateTime , la mayoría de las veces es mejor usar un tipo diferente.Temporal.Duration representa un período de tiempo. Su modelo de datos es un número de años, meses, días, horas, minutos, segundos, milisegundos, microsegundos y nanosegundos.Temporal.TimeZone representa una zona horaria IANA como Asia/Tokyo o (rara vez) una zona horaria compensada como +06:00 . Su modelo de datos es el ID canónico de la zona horaria, por ejemplo, "Asia/Tokyo" o "+06:00" .Temporal.Calendar representa un calendario como el hebreo, el chino o el calendario ISO 8601 predeterminado. Su modelo de datos es el ID del calendario, por ejemplo, "iso8601" o "hebrew" . Tenga en cuenta que Temporal no puede analizar los formatos de cadena localizados como '12/25/2022' . Temporal solo puede analizar formatos inequívocos y legibles por computadora, como '2022-25-12' .