No momento, estamos explorando a exibição de registros de data e hora com fuso horário para nossos usuários e decidimos usar essa Intl.DateTimeFormat
opção timeZoneName: "shortOffset"
, mas agora percebemos que o valor é diferente entre os idiomas.
Quando executo esse snippet no Chrome imprimindo o fuso horário em diferentes idiomas:
["it-IT", "da-DK", "de-DE", "en-GB", "es-ES", "pl-PL", "fr-FR", "sv-SE", "nl-NL", "nb-NO", "el-GR", "fi-FI", "pt-PT", "cs-CZ", ].forEach((l) => {
const tz = Intl.DateTimeFormat(l, {
timeZone: "Asia/Kolkata",
timeZoneName: "shortOffset",
})
.formatToParts(new Date())
.find((p) => p.type === "timeZoneName").value;
console.log(l, tz);
});
Obtenho este resultado:
linguagem | fuso horário |
---|---|
isso-TI | GMT+5:30 |
da-DK | GMT+5.30 |
de-DE | GMT+5:30 |
en-GB | GMT+5:30 |
es-ES | GMT+5:30 |
pl-PL | GMT+5:30 |
fr-FR | UTC+5:30 |
sv-SE | GMT+5:30 |
nl-NL | GMT+5:30 |
nb-NÃO | GMT+5:30 |
el-GR | GMT+5:30 |
fi-FI | UTC+5,30 |
pt-PT | GMT+5:30 |
cs-CZ | GMT+5:30 |
então, por algum motivo, o francês e o finlandês estão usando o rótulo UTC e todos os outros idiomas testados estão usando GMT.
Eu realmente gostaria de saber o motivo disso. Existe alguma documentação ou banco de dados onde eu possa encontrar a configuração dos diferentes idiomas Intl.DateTimeFormat
?
Algumas coisas:
Intl
respostas da API se origina do Unicode CLDR (não IANA).gmtFormat
internamente. Por exemplo, você pode ver aqui em francês que é especificado como ,<gmtFormat>UTC{0}</gmtFormat>
enquanto aqui em inglês é especificado como<gmtFormat>GMT{0}</gmtFormat>
.GMT Format
neste gráfico ), ou sequer os utilizam (chinês, japonês, etc.), portanto, as substituições podem não se aplicar a todos os idiomas.