Homepage » Coding » Un modo definitivo di formattare le date per i siti internazionali

    Un modo definitivo di formattare le date per i siti internazionali

    I formati delle date variano a seconda della regione e della lingua, quindi è sempre utile trovare un modo per visualizzare le date per gli utenti, specifiche per la loro lingua e regione.

    Già nel dicembre 2012, ECMA ha rilasciato le specifiche dell'API di internazionalizzazione per JavaScript. L'API di internazionalizzazione ci aiuta a visualizzare determinati dati in base alla lingua e alle specifiche cuturali. Può essere usato per identificare valute, fusi orari e altro ancora.

    In questo post esamineremo formattazione della data usando questa API.

    Conoscere le impostazioni locali dell'utente

    Per mostrare la data secondo le impostazioni locali preferite dell'utente, per prima cosa dobbiamo sapere qual è il locale preferito. Attualmente il modo infallibile per sapere che è quello di chiedere all'utente; Consenti agli utenti di selezionare la lingua e le impostazioni della regione preferite nella pagina web.

    Ma se questa non è un'opzione, puoi interpretare il Accept-Language richiesta intestazione o leggere il navigator.language(per Chrome e Firefox) o navigator.browserLanguage(per IE) valori.

    Si prega di sapere che non tutte queste opzioni restituiscono la lingua preferita dell'interfaccia utente del browser.

     var language_tag = window.navigator.browserLanguage || window.navigator.language || "En"; // restituisce tag della lingua come 'en-GB' 

    Controlla l'API di internazionalizzazione

    Per sapere se il browser supporta o meno l'API di internazionalizzazione, possiamo verificare la presenza dell'oggetto globale Intl.

     if (window.hasOwnPropertyâ €‹("Intl") && typeof Intl === "oggetto") // L'API di internazionalizzazione è presente, usiamola 

    Il Intl oggetto

    Intl è un oggetto globale per l'utilizzo dell'API di internazionalizzazione. Ha tre proprietà che sono costruttori per tre oggetti cioè Collator, NumberFormat, e DateTimeFormat.

    L'oggetto che useremo è DateTimeFormat che ci aiuterà a formattare la data in base alle diverse lingue.

    Il DateTimeFormat oggetto

    Il DateTimeFormat costruttore prende due argomenti opzionali;

    • locali - una stringa o una serie di stringhe che rappresentano i tag della lingua, ad esempio; “de” per la lingua tedesca, “it-IT” per l'inglese usato nel Regno Unito. Se non viene menzionato un tag della lingua, la locale predefinita sarà quella del runtime.
    • opzioni - un oggetto le cui proprietà sono utilizzate per personalizzare il formattatore. Ha le seguenti proprietà:
    Proprietà Descrizione Valori possibili
    giorno Giorno del mese “2 cifre”, “numerico”
    era Era la data in cui cade, Es: BC “stretto”, “corto”, “lungo”
    formatMatcher L'algoritmo utilizzato per la corrispondenza del formato “di base”, “il più adatto”[Predefinito]
    ora Rappresenta le ore nel tempo “2 cifre”, “numerico”
    hour12 Indica il formato di 12 ore (vero) o formato di 24 ore (falso) vero, falso
    localeMatcher L'algoritmo utilizzato per la corrispondenza delle impostazioni internazionali “consultare”, “il più adatto”[Predefinito]
    minuto Minuti nel tempo “2 cifre”, “numerico”
    mese Mese in un anno “2 cifre”, “numerico”, “stretto”, “corto”, “lungo”
    secondo Secondi nel tempo “2 cifre”, “numerico”
    fuso orario Fuso orario da applicare “UTC”, l'impostazione predefinita è il fuso orario di runtime
    TimeZoneName Fuso orario della data “corto”, “lungo”
    giorno feriale Giorno della settimana “stretto”, “corto”, “lungo”
    anno Anno della data “2 cifre”, “numerico”

    Esempio:

     var formatter = new Intl.DateTimeFormat ('en-GB'); / * restituisce un formattatore in grado di formattare una data nel formato data inglese britannico * / 
     var options = weekday: 'short'; var formatter = new Intl.DateTimeFormat ('en-GB', opzioni); / * restituisce un formattatore in grado di formattare una data nel formato data inglese britannico * insieme al giorno della settimana in notazione breve come 'Gio' per Giovedì * / 

    Il formato funzione

    L'istanza del DateTimeFormat l'oggetto ha una proprietà accessor (getter) chiamata formato che restituisce una funzione che formatta a Data basato sul locali e opzioni trovato nel DateTimeFormat esempio.

    La funzione accetta a Data oggetto o non definito come argomento opzionale e restituisce a stringa nel formato data richiesto.

    Nota: Se l'argomento è o non definito o non fornito, restituisce il valore di Date.now () nel formato data richiesto.

    Ecco la sintassi:

     new Intl.DateTimeFormat (). format () // restituirà la data corrente nel formato della data di runtime 

    E ora cerchiamo di codificare una semplice formattazione della data.

    Cerchiamo di cambiare la lingua e vedere l'output.

    Ora è il momento di esaminare le opzioni.

    Il toLocaleDateString metodo

    Invece di usare un formattatore come mostrato negli esempi precedenti, puoi anche usare Date.prototype.toLocaleString allo stesso modo con il locali e opzioni argomenti, sono simili ma si consiglia di utilizzare il DateTimeFormat oggetto quando si gestiscono troppe date nella propria applicazione.

     var mydate = new Date ('2015/04/22'); var options = weekday: "short", year: "numeric", month: "long", day: "numeric"; console.log (mydate.toLocaleDateString ( 'it-IT', opzioni)); // restituisce "Wed, 22 aprile 2015" 

    Prova se il locali sono supportati

    Per controllare per il supportato locali, possiamo usare il metodo supportedLocalesOf di DateTimeFormat oggetto. Restituisce un array di tutte le locali di supporto o un array vuoto se nessuna delle impostazioni locali è supportata.

    Per il test, aggiungiamo un locale fittizio “bla” nell'elenco delle località da verificare.

     console.log (Intl.DateTimeFormat.supportedLocalesOf (["zh", "blah", "fa-pes"])); // restituisce Array ["zh", "fa-pes"] 

    Supporto del browser

    Alla fine di aprile 2015, i principali browser supportano l'API di internazionalizzazione.

    Riferimenti

    • ECMA Internazionale: specifica API di internazionalizzazione ECMAScript
    • IANA: Registro di sottotag della lingua
    • Norbert's Corner: l'API di internazionalizzazione ECMAScript