-
Lançamento do JavaScript Temporal começa
- A implementação do novo objeto JavaScript Temporal começou a ser incluída em versões experimentais dos navegadores. Isso é uma grande novidade para desenvolvedores web, e o tratamento de datas e horas em JavaScript deve ficar muito mais simples e moderno.
- Aplicações que dependem de agendamento, internacionalização e dados sensíveis ao tempo poderão usar funcionalidades nativas para trabalhar com datas, horários, durações e calendários de forma eficiente, precisa e consistente.
- Ainda falta bastante para haver suporte estável entre navegadores, e podem ocorrer mudanças conforme a implementação evolui, mas já é possível conhecer o Temporal atual, entender por que ele existe e quais problemas resolve.
- Há mais de 270 páginas de documentação sobre Temporal adicionadas ao MDN esta semana, com explicações detalhadas e exemplos.
-
O que é JavaScript Temporal?
- Para entender o Temporal, vale olhar para o objeto
Date do JavaScript. Quando o JavaScript foi criado em 1995, o objeto Date foi copiado da implementação inicial e problemática de java.util.Date no Java.
- O Java substituiu essa implementação em 1997, mas o JavaScript ficou preso à mesma API por quase 30 anos.
- O principal problema do objeto
Date no JavaScript é que ele só oferece suporte ao horário local do usuário e a UTC, sem suporte a fusos horários. Além disso, o comportamento de parsing é pouco confiável, e o próprio Date é mutável, o que pode causar bugs difíceis de rastrear.
- Por causa de todos esses problemas, lidar com datas e horas em JavaScript é complexo e propenso a erros. A maioria dos desenvolvedores depende de bibliotecas como Moment.js e date-fns para tratar melhor datas e horários em suas aplicações.
- O Temporal foi projetado para substituir completamente o objeto
Date, tornando o gerenciamento de datas e horas confiável e previsível. O Temporal oferece suporte à representação de fusos horários e calendários, e adiciona muitos métodos nativos para conversão, comparação, cálculos, formatação e mais.
-
Conceitos principais
- Os conceitos centrais no Temporal são instante (um ponto único na história), hora de parede (horário local) e duração. A API tem a seguinte estrutura para lidar com esses conceitos:
- Duração:
Temporal.Duration, a diferença entre dois pontos no tempo
- Pontos no tempo:
- Ponto único no tempo:
- Como timestamp:
Temporal.Instant
- Data-hora com fuso horário:
Temporal.ZonedDateTime
- Data/hora sem fuso horário ("Plain"):
- Data e hora completas:
Temporal.PlainDateTime
- Apenas data:
Temporal.PlainDate
- Ano e mês:
Temporal.PlainYearMonth
- Mês e dia:
Temporal.PlainMonthDay
- Apenas hora:
Temporal.PlainTime
- Agora: use
Temporal.now para obter o horário atual como instâncias de várias classes ou em um formato específico
-
Exemplos de Temporal
- Alguns dos usos mais básicos do Temporal incluem obter a data e a hora atuais como strings ISO. Agora, muitos métodos permitem informar o fuso horário, o que elimina a necessidade de fazer cálculos complexos manualmente.
- Trabalhar com diferentes calendários também foi simplificado, permitindo criar datas em sistemas de calendário além do gregoriano, como hebraico, chinês e islâmico.
- Trabalhar com timestamps Unix é um caso de uso muito comum, já que muitos sistemas (APIs, bancos de dados) usam esse formato para representar tempo.
- O método
compare() permite ordenar durações de forma elegante e eficiente.
-
Testando o Temporal e suporte dos navegadores
- O suporte começou a aparecer lentamente em versões experimentais de navegadores, e o Firefox atualmente tem a implementação mais madura.
- No Firefox, o Temporal está embutido na versão Nightly atrás da configuração
javascript.options.experimental.temporal.
- Com a chegada das implementações experimentais, este é um bom momento para testar o Temporal e se familiarizar com uma abordagem moderna para lidar com datas e horas em JavaScript.
-
Agradecimentos
- Agradecimentos a Eric Meyer pelo trabalho no tema. Já se passaram cerca de 4 anos desde que Eric documentou os dados de compatibilidade entre navegadores e organizou a documentação em um fork de mdn/content.
- Joshua Chen assumiu o trabalho de Eric e preparou o pull request para a documentação do MDN.
- Agradecimentos a André Bargull pelo trabalho na implementação do Temporal no Firefox.
1 comentários
Comentários no Hacker News
Temporal é útil para resolver os problemas da API legada
Date(). Ele oferece uma API conveniente inspirada em bibliotecas de tempo de alta qualidade comochronodo Rust e Joda Time do JavaÉ possível converter fusos horários usando
Temporal.ZonedDateTime.prototype.withTimeZone()Temporal.Durationnão fornece uma funçãoformatpersonalizadaA proposta Temporal é boa, mas é uma pena que use igualdade por referência nas comparações
Mapou agrupá-los emSetMuitas funcionalidades estão sendo desenvolvidas no TC39, e há expectativa de que o Temporal seja lançado logo
Há curiosidade sobre como o Temporal atualizará os dados de fuso horário
Foi sugerido adicionar eventos para mudanças de fuso horário
O nome Temporal foi escolhido para evitar conflito com objetos de tempo genéricos, mas no início pode ser confundido com controle de coleta de lixo
A classe Carbon do PHP herda de
DateTimee ilustra os problemas de trabalhar com timestamps mutáveisCarbonImmutable, que sempre retorna uma nova instânciaCarbonImmutableeCarboncom aliases no LaravelHá vários artigos e discussões relacionados ao JavaScript Temporal