O instante 2026-11-04T01:00:00Z corresponde às 21h de 3 de novembro em Cuiabá. Se o sistema agrupa eventos pelo dia em UTC, o relatório coloca esse registro no dia 4. Se o relatório é local, agrupe usando o fuso escolhido pelo produto.

const format = new Intl.DateTimeFormat("pt-BR", {
  dateStyle: "short",
  timeStyle: "short",
  timeZone: "America/Cuiaba",
})
console.log(format.format(new Date("2026-11-04T01:00:00Z")))

Nem toda data representa um instante

Para um registro de acesso, guarde o instante com uma representação inequívoca, como ISO com Z ou offset. Para um aniversário ou uma data de vencimento sem horário, preserve a data de calendário no formato AAAA-MM-DD. Converter esse valor para meia-noite UTC e formatar no fuso local pode exibir o dia anterior.

Se o evento é marcado para as 9h em uma cidade, guarde também o fuso usado no agendamento quando o contexto precisar ser preservado. Teste datas próximas à meia-noite para confirmar a regra de exibição e agrupamento.

Documentação de referência · Como manter filtros de uma página na URL com URLSearchParams

Faça parsing com uma regra explícita

Uma string ISO com Z representa UTC. Uma string com offset representa um instante relativo àquele offset. Já uma string sem offset pode ser interpretada segundo o runtime local, o que torna o resultado dependente da máquina. Para APIs, prefira transmitir instantes com offset e documentar o formato aceito. Para datas civis, mantenha ano, mês e dia sem criar artificialmente um instante.

O fuso de uma região contém regras históricas e pode mudar por decisão política. Um offset fixo como -03:00 não descreve sempre o horário local de uma cidade. Use um identificador IANA quando precisa aplicar as regras do lugar. Intl.DateTimeFormat localiza a exibição, mas não substitui a política de armazenamento e agrupamento definida pelo produto.

Teste transições e limites do calendário

Cubra instantes próximos da meia-noite, virada do mês e do ano, anos bissextos e mudanças de offset do fuso escolhido. Um horário local pode ser ambíguo ou inexistente em lugares que mudam o relógio. Para agendamentos, decida se a pessoa quis marcar um instante específico ou uma hora de parede que deve continuar valendo depois de uma mudança de fuso.

Não use uma data formatada para ordenar ou comparar instantes. Compare valores temporais normalizados e formate na fronteira de apresentação. Para um relatório diário, o intervalo local pode começar em um instante UTC diferente a cada dia; construa os limites no fuso do relatório, não somando sempre 24 horas ao instante anterior.

Datas recebidas de uma API precisam de contrato estável. Se um cliente manda "2026-11-08", confirme se o campo representa um dia civil ou meia-noite numa região. Se representa um instante, exija offset ou Z e normalize a comparação. Não corrija uma data deslocando horas manualmente: a regra pode falhar em outro fuso ou numa atualização de horário legal. Mantenha exemplos de entrada e saída no contrato e teste-os em ambientes configurados com fusos diferentes.