HOWTO · JavaScript
Converter data para UTC em JavaScript
Podemos converter a data para o formato UTC usando a função `toISOString()` em JavaScript.
Nesta página
Date.prototype.toISOString() retorna uma string UTC para o instante armazenado em um Date válido. Ele serializa esse instante; não altera o objeto Date. Para obter uma string ISO em UTC que represente o instante atual, chame toISOString():
Converter a data atual em uma string UTC
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
const now = new Date();
const utcString = now.toISOString();
console.log(utcString);
new Date() captura o instante atual. A hora exibida depende de quando o código é executado, portanto este exemplo não tem uma saída fixa. A string resultante é sempre expressa em UTC, independentemente do fuso horário local da máquina. Mantenha o valor Date se o programa ainda precisar do instante; toISOString() retorna uma string e não altera now.
Converter uma data específica para UTC
Para um instante conhecido, crie o Date com uma string ISO de data e hora que inclua Z ou um deslocamento numérico. Neste exemplo, Z indica que a hora fornecida já está em UTC:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
const date = new Date('2025-03-16T15:00:00Z');
console.log(date.toISOString());
Isso representa 15h de 16 de março de 2025 em UTC. Chamar toISOString() serializa o mesmo instante com a precisão padrão de milissegundos. Uma string ISO contendo apenas a data, como 2025-03-16, também é interpretada como UTC, mas uma string de data e hora sem deslocamento, como 2025-03-16T15:00:00, é interpretada como hora local. Informe o fuso horário pretendido na entrada quando o instante precisar ser consistente em diferentes ambientes.
Se, em vez disso, você extrair componentes da data, use os getters UTC para obter componentes em UTC. Por exemplo, getUTCMonth() retorna o mês começando em zero (janeiro é 0), enquanto getUTCDate() retorna o dia do mês. Esses getters consultam a representação UTC de um instante; não criam nem convertem um instante.
Converter uma data e hora locais com um deslocamento explícito
Um deslocamento numérico indica a relação entre a hora do relógio local e UTC. Por exemplo, -05:00 significa que a hora local está cinco horas atrás de UTC; assim, 15h nesse deslocamento corresponde a 20h em UTC:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
const appointment = new Date('2025-03-16T15:00:00-05:00');
console.log(appointment.toISOString());
O deslocamento explícito torna esse instante portátil. Não trate -05:00 como o horário do leste dos Estados Unidos em todas as datas: as regras de horário de verão podem alterar o deslocamento de uma região, e um deslocamento numérico não inclui regras de fuso horário. Se alguém informar a hora local de um compromisso, obtenha o fuso horário pretendido e resolva essa hora com uma biblioteca ou API compatível com fusos horários antes de criar o instante. O Date do JavaScript armazena um instante, não o nome original do fuso horário nem a indicação da hora no relógio local.
Entender a saída ISO 8601
Um resultado típico de toISOString() tem o formato YYYY-MM-DDTHH:mm:ss.sssZ. O T separa a data e a hora, os três dígitos após o ponto decimal representam milissegundos, e o Z final indica UTC (deslocamento +00:00). O método sempre usa essa representação UTC; não preserva o deslocamento informado na entrada nem um rótulo de fuso horário local. Por exemplo, entradas que indicam o mesmo instante com Z e -05:00 produzem a mesma string UTC.
Esse formato é útil para trocar instantes com APIs e armazenar registros de data e hora quando o sistema que os recebe espera UTC. Por si só, ele não preserva uma data de calendário em uma região específica. Se uma aplicação precisar exibir o instante no fuso horário de uma pessoa, formate o Date com Intl.DateTimeFormat e a opção de fuso horário pretendida, em vez de tratar a string ISO como texto para exibição local.
Tratar datas inválidas e limitações de parsing
Date aceita vários formatos de string, mas nem todos são interpretados de maneira consistente entre ambientes. Prefira strings padronizadas de data ou data e hora ISO com um fuso horário explícito. Strings com barras, como 03/04/2025, são ambíguas, e uma data e hora sem deslocamento usa o fuso horário local do sistema. Evite depender de qualquer uma dessas formas quando o instante pretendido precisar ser portátil.
Uma string que não pode ser analisada cria um Date inválido; chamar toISOString() nesse objeto lança um RangeError. Quando a entrada não for confiável, defina os tipos aceitos antes de criar uma data. Este helper aceita uma string, um número de timestamp em milissegundos ou um Date existente; rejeita null, valores booleanos e outros tipos, e retorna null para uma data inválida:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
function toUtcISOString(value) {
if (typeof value !== 'string' && typeof value !== 'number' && !(value instanceof Date)) {
return null;
}
const date = value instanceof Date ? value : new Date(value);
if (Number.isNaN(date.getTime())) {
return null;
}
return date.toISOString();
}
A verificação distingue um instante válido de uma data inválida, e retornar null permite que quem chama decida como informar sobre uma entrada incorreta. Ela não resolve horários locais ambíguos nem valida se as regras regionais de fuso horário fornecidas são adequadas; isso exige o tratamento explícito do fuso horário.