24 de dezembro, 21:47. A família tá chegando, o peru no forno, a farofa pronta e a mesa posta. Meu celular vibra.
"Produção tá mostrando data errada em todas as notas emitidas hoje."
Claro, na véspera de Natal. Por que seria em outro dia? Bug de produção não respeita feriado.
Abro o notebook por "só cinco minutinhos". Minha esposa me lança o olhar que todo dev casado conhece: "se tu passar a véspera de Natal debugando, juro que conto pra tua mãe o que tu faz da vida. E ela vai achar que tu é hacker".
Nos logs, todas as notas depois das 21h mostram 25 de dezembro em vez de 24. Cliente confuso chama o suporte, o time contábil tá em pânico e o WhatsApp pega fogo. Tem áudio de 3 minutos do financeiro. Meu Deus do céu.
Penso em timezone na hora. É sempre timezone.
Nosso servidor tá em UTC, e Brasília é UTC-3. Às 15h de Brasília são 18h UTC, ainda dia 24. A virada vem às 21h de Brasília, meia-noite UTC, já no dia 25. A formatação usava o fuso do servidor em vez do cliente porque eu, seis meses antes, escrevi new Date() sem usar a utility de timezone que eu mesmo criei. Dá pra fatiar a ironia de tão grossa.
Corrijo uma linha, faço deploy e verifico. Tudo certo, fecho o notebook.
Foram 22 minutos com os cinco estágios do luto. Negação: não pode ser timezone, já corrigimos isso. Raiva: por que tempo é tão difícil, PQP? Barganha: será que dá pra mudar o relógio do servidor e fingir que nada aconteceu? Depressão: tô debugando na véspera de Natal, bicho. Aceitação: sempre foi timezone e sempre vai ser.
O peru e a farofa ficaram ótimos. Minha esposa me perdoou e as notas tão corretas.
Feliz Natal. Que tuas datas tenham timezone e que tu pense no fuso horário antes de escrever new Date(). Amém.