
A nova API Temporal trouxe uma série de melhorias significativas para o manuseio de datas e horários em JavaScript, facilitando tarefas comuns e complexas. Uma das funcionalidades mais básicas é a obtenção da data e hora atuais como uma string ISO. Além disso, agora é possível especificar fusos horários em diversas funções, o que elimina a necessidade de cálculos manuais complicados. Por exemplo, o código abaixo demonstra a obtenção da data atual no fuso horário de Nova York:
```js
// A data atual no fuso horário "America/New_York"
const dateTimeInNewYork = Temporal.Now.plainDateTimeISO("America/New_York");
console.log(dateTimeInNewYork);
// e.g.: 2025-01-22T05:47:02.555
```
Outra inovação importante é a possibilidade de trabalhar com diferentes calendários. Com isso, é possível criar datas em sistemas que não são apenas o gregoriano, como os calendários hebraico, chinês e islâmico. O exemplo abaixo ilustra como determinar a próxima celebração do Ano Novo Chinês:
```js
// Os Anos Novos Chineses ocorrem em 1/1 no calendário chinês
const chineseNewYear = Temporal.PlainMonthDay.from({ monthCode: "M01", day: 1, calendar: "chinese", });
const currentYear = Temporal.Now.plainDateISO().withCalendar("chinese").year;
let nextCNY = chineseNewYear.toPlainDate({ year: currentYear });
// Se nextCNY ocorrer antes da data atual, avançar um ano
if (Temporal.PlainDate.compare(nextCNY, Temporal.Now.plainDateISO()) <= 0) {
nextCNY = nextCNY.add({ years: 1 });
}
console.log(`O próximo Ano Novo Chinês será em ${nextCNY.withCalendar("iso8601").toLocaleString()}`);
// O próximo Ano Novo Chinês é em 1/29/2025 (no momento da escrita)
```
Outro uso comum da API é o trabalho com timestamps Unix, que são amplamente utilizados em várias plataformas. O exemplo a seguir mostra como converter um timestamp em milissegundos em um instante e calcular a diferença até o momento atual:
```js
// 1851222399924 é nosso timestamp
const launch = Temporal.Instant.fromEpochMilliseconds(1851222399924);
const now = Temporal.Now.instant();
const duration = now.until(launch, { smallestUnit: "hour" });
console.log(`Faltam ${duration.toLocaleString("en-US")} até o lançamento`);
// "Faltam 31,600 hr até o lançamento"
```
É importante ressaltar que, atualmente, o método toLocaleString não gera uma string sensível ao local na implementação do Firefox, o que resulta em formatos de duração não sensíveis ao local. Isso pode mudar no futuro, já que a formatação de duração é tecnicamente viável, e as implementações podem convergir.
Um aspecto interessante da API é o método compare(), que permite ordenar durações de forma elegante e eficiente. Com tantas melhorias, a API Temporal promete facilitar a vida dos desenvolvedores na manipulação de datas e horários.
Confira os últimos vídeos publicados no canal