Vai al contenuto principale

Intl.DateTimeFormat (ESNext)

Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

Un polyfill conforme alle specifiche per Intl.DateTimeFormat, completamente testato dalla suite ufficiale di test di conformità ECMAScript

npm Version size

attenzione

Attualmente questo polyfill supporta solo il calendario gregoriano. Pertanto consigliamo di impostare calendar: 'gregory' nelle opzioni per sicurezza.

attenzione

Attualmente questo polyfill supporta le transizioni dell'ora legale fino al 2100 per ridurre le dimensioni del dataset.

Funzionalità

Installazione

npm i @formatjs/intl-datetimeformat

Requisiti

Questo pacchetto richiede le seguenti funzionalità:

Utilizzo

Tramite polyfill-fastly.io

Puoi utilizzare il creatore di URL polyfill-fastly.io per generare un tag script di polyfill per Intl.DateTimeFormat. Di default, l'URL generato non include dati di localizzazione. Per aggiungere dati di localizzazione, includi Intl.DateTimeFormat.~locale.<locale> e i dati di localizzazione per eventuali polyfill richiesti nella lista delle funzionalità. Esempio:

<!-- Polyfill Intl.DateTimeFormat, its dependencies & `en` locale data -->
<script src="https://polyfill-fastly.io/v3/polyfill.min.js?features=Intl.DateTimeFormat,Intl.DateTimeFormat.~locale.en,Intl.NumberFormat.~locale.en"></script>

Semplice

import '@formatjs/intl-datetimeformat/polyfill'
import '@formatjs/intl-datetimeformat/locale-data/en' // locale-data for en
import '@formatjs/intl-datetimeformat/add-all-tz' // Add ALL tz data

Importazione dinamica + rilevamento funzionalità

import {shouldPolyfill} from '@formatjs/intl-datetimeformat/should-polyfill'
async function polyfill(locale: string) {
const unsupportedLocale = shouldPolyfill(locale)
// This locale is supported
if (!unsupportedLocale) {
return
}
// Load the polyfill 1st BEFORE loading data
await import('@formatjs/intl-datetimeformat/polyfill-force')

// Parallelize CLDR data loading
const dataPolyfills = [
import('@formatjs/intl-datetimeformat/add-all-tz'),
import(`@formatjs/intl-datetimeformat/locale-data/${unsupportedLocale}`),
]
await Promise.all(dataPolyfills)
}

Aggiunta del database IANA dei fusi orari

Forniamo 2 versioni pre-elaborate dei fusi orari IANA:

Completo: contiene TUTTI i fusi orari del database IANA

import '@formatjs/intl-datetimeformat/polyfill'
import '@formatjs/intl-datetimeformat/add-all-tz'

Golden: contiene un set popolare di fusi orari dal database IANA

import '@formatjs/intl-datetimeformat/polyfill'
import '@formatjs/intl-datetimeformat/add-golden-tz'

Fuso orario predefinito

Poiché i motori JavaScript non espongono il fuso orario predefinito, attualmente non è possibile rilevare il fuso orario locale del browser. Pertanto, il fuso orario predefinito in questo polyfill è UTC.

Puoi modificarlo chiamando __setDefaultTimeZone o passando sempre esplicitamente l'opzione timeZone per calcoli temporali precisi.

Poiché __setDefaultTimeZone non fa parte delle specifiche, verifica la sua esistenza prima di chiamarlo e dopo il caricamento dei dati dei fusi orari, ad esempio:

import '@formatjs/intl-datetimeformat/polyfill'
import '@formatjs/intl-datetimeformat/add-all-tz.js'

if ('__setDefaultTimeZone' in Intl.DateTimeFormat) {
Intl.DateTimeFormat.__setDefaultTimeZone('America/Los_Angeles')
}

Test

Questa libreria è completamente conforme a test262.