FNSP Web Page

Datas, moedas e listas em português sem instalar nada

Há um reflexo antigo em JavaScript: precisa de formatar uma data, instala uma biblioteca. Só que o objeto Intl está no browser e no Node há anos, sabe o que é o português europeu, e não pesa um byte no bundle.

1. Datas

const data = new Date('2026-04-07T15:30:00');

new Intl.DateTimeFormat('pt-PT').format(data);
// '07/04/2026'

new Intl.DateTimeFormat('pt-PT', { dateStyle: 'long' }).format(data);
// '7 de abril de 2026'

new Intl.DateTimeFormat('pt-PT', { dateStyle: 'full', timeStyle: 'short' }).format(data);
// 'terça-feira, 7 de abril de 2026 às 15:30'

Repare no dateStyle em vez de escolher dia, mês e ano à mão: é o que garante que a ordem e os separadores são os da língua, e não os do sítio onde o código foi escrito.

2. Números e dinheiro

new Intl.NumberFormat('pt-PT').format(1234567.891);
// '1 234 567,891'

new Intl.NumberFormat('pt-PT', { style: 'currency', currency: 'EUR' }).format(19.9);
// '19,90 €'

new Intl.NumberFormat('pt-PT', { style: 'percent', maximumFractionDigits: 1 }).format(0.235);
// '23,5%'

3. "Há 3 dias"

const relativo = new Intl.RelativeTimeFormat('pt-PT', { numeric: 'auto' });

relativo.format(-1, 'day'); // 'ontem'
relativo.format(-3, 'day'); // 'há 3 dias'
relativo.format(2, 'week'); // 'dentro de 2 semanas'

O numeric: 'auto' é o que troca "há 1 dia" por "ontem". É o género de detalhe pelo qual se instalava uma biblioteca inteira.

4. Listas e ordenação

new Intl.ListFormat('pt-PT').format(['maçãs', 'peras', 'uvas']);
// 'maçãs, peras e uvas'

// Ordenar com acentos como uma pessoa espera
const nomes = ['Ávila', 'Alves', 'Zé', 'Água'];

nomes.sort(); // ['Alves', 'Zé', 'Ávila', 'Água'] — pela tabela de caracteres
nomes.sort(new Intl.Collator('pt-PT').compare); // ['Água', 'Alves', 'Ávila', 'Zé']

Aquele sort() simples é um bug à espera de acontecer em qualquer lista de nomes portugueses. O Collator resolve-o numa linha.

Comentários

Ainda ninguém comentou este artigo.

Voltar ao blog

Gostávamos de saber quantas pessoas visitam o site, com o Google Analytics. Sem a sua autorização não corre nada. Política de Privacidade.