2 pontos por GN⁺ 2025-01-31 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2025-01-31
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 como chrono do Rust e Joda Time do Java

    • Tempo é complexo, e o Temporal lida com isso separando em tempo ingênuo, instante e tempo com fuso
    • Ao adicionar um dia a um timestamp, é preciso decidir se ele é local em um fuso horário específico. Caso contrário, podem surgir bugs em mudanças de DST ou de fuso horário
    • Também resolve problemas de serialização entre timestamps de "offset fixo" e timestamps de um fuso horário específico
  • É possível converter fusos horários usando Temporal.ZonedDateTime.prototype.withTimeZone()

    • Conversão de fuso horário e tratamento de durações são funções importantes que uma biblioteca deve oferecer, e o Temporal cuida disso
    • Porém, Temporal.Duration não fornece uma função format personalizada
  • A proposta Temporal é boa, mas é uma pena que use igualdade por referência nas comparações

    • Isso elimina a possibilidade de usar os objetos como chaves de Map ou agrupá-los em Set
  • Muitas funcionalidades estão sendo desenvolvidas no TC39, e há expectativa de que o Temporal seja lançado logo

    • Os principais navegadores precisarão de esforço de desenvolvimento para dar suporte aos novos recursos
  • Há curiosidade sobre como o Temporal atualizará os dados de fuso horário

    • Se o usuário não atualizar o navegador, poderá ver horários incorretos
  • Foi sugerido adicionar eventos para mudanças de fuso horário

    • Muitas pessoas mudam de fuso horário todos os dias
  • 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 DateTime e ilustra os problemas de trabalhar com timestamps mutáveis

    • É melhor usar CarbonImmutable, que sempre retorna uma nova instância
    • Foi sugerida uma forma de importar CarbonImmutable e Carbon com aliases no Laravel
  • Há vários artigos e discussões relacionados ao JavaScript Temporal