Startpagina » Coding » Een definitieve manier om datums voor internationale websites te formatteren

    Een definitieve manier om datums voor internationale websites te formatteren

    Datumnotaties verschillen per regio en taal, dus het is altijd handig als we een manier kunnen vinden om de datums voor de gebruikers weer te geven, specifiek voor hun taal en regio.

    In december 2012 heeft ECMA de specificaties van Internationalization API voor JavaScript vrijgegeven. De Internationalization API helpt ons bepaalde gegevens weer te geven op basis van de taal en de specificatie van de muis. Het kan worden gebruikt om identificeer valuta's, tijdzones en meer.

    In deze post zullen we kijken naar datumnotatie met behulp van deze API.

    Ken de landinstelling van de gebruiker

    Als u de datum wilt weergeven volgens de voorkeurslandinstelling van de gebruiker, moeten we eerst weten wat de voorkeurslandinstelling is. Momenteel is de onfeilbare manier om dat te weten de gebruiker te vragen; laat gebruikers hun voorkeurstaal en regio-instellingen op de webpagina selecteren.

    Maar als dat geen optie is, kun je het interpreteren Accept-Language aanvraag header of lees de navigator.language(voor Chrome en Firefox) of navigator.browserLanguage(voor IE) waarden.

    Houd er rekening mee dat niet al deze opties de voorkeurstaal van de gebruikersinterface van de browser retourneren.

     var language_tag = window.navigator.browserLanguage || window.navigator.language || "En"; // retourneert taallabels zoals 'en-GB' 

    Controleer op Internationalisatie-API

    Om te weten of de browser Internationalization API ondersteunt of niet, kunnen we controleren of het globale object aanwezig is Intl.

     if (window.hasOwnPropertyâ €‹("Intl") && typeof Intl === "object") // Internationalisatie API is aanwezig, laat ons dat gebruiken 

    De Intl voorwerp

    Intl is een globaal object voor het gebruik van de Internationalization API. Het heeft drie eigenschappen die constructeurs zijn voor drie objecten namelijk collator, Nummer formaat, en DateTimeFormat.

    Het object dat we zullen gebruiken is DateTimeFormat waarmee we de datum kunnen indelen volgens verschillende talen.

    De DateTimeFormat voorwerp

    De DateTimeFormat constructor neemt twee optionele argumenten;

    • locales - een tekenreeks of een reeks tekenreeksen die de taaltags vertegenwoordigen, bijvoorbeeld; “de” voor Duitse taal, “nl-NL” voor Engels gebruikt in het Verenigd Koninkrijk. Als een taaltag niet wordt vermeld, is de standaardlocale die van runtime.
    • opties - een object waarvan de eigenschappen worden gebruikt om de formatter aan te passen. Het heeft de volgende eigenschappen:
    Eigendom Omschrijving Mogelijke waarden
    dag Dag van de maand “2-cijferige”, “numerieke”
    tijdperk Tijdperk waarin de datum valt, Ex: BC “smal”, “kort”, “lang”
    formatMatcher Het algoritme dat wordt gebruikt voor het afstemmen van formaten “basis-”, “beste pasvorm”[Standaard]
    uur Vertegenwoordigt uren in de tijd “2-cijferige”, “numerieke”
    hour12 Geeft het 12-uurs formaat aan (waar) of 24-uursformaat (vals) waar, vals
    localeMatcher Het algoritme dat wordt gebruikt voor locale-overeenkomsten “opzoeken”, “beste pasvorm”[Standaard]
    minuut Minuten in de tijd “2-cijferige”, “numerieke”
    maand Maand in een jaar “2-cijferige”, “numerieke”, “smal”, “kort”, “lang”
    tweede Seconden in de tijd “2-cijferige”, “numerieke”
    tijdzone Tijdzone om toe te passen “UTC”, standaard is runtime tijdzone
    timeZoneName Tijdzone van de datum “kort”, “lang”
    weekdag Dag in de week “smal”, “kort”, “lang”
    jaar Jaar van de datum “2-cijferige”, “numerieke”

    Voorbeeld:

     var formatter = new Intl.DateTimeFormat ('en-GB'); / * geeft een formatter terug die een datum kan indelen in Engelse datumnotatie * / 
     var options = weekday: 'short'; var formatter = new Intl.DateTimeFormat ('en-GB', opties); / * geeft een formatter terug die een datum kan indelen in Engelse datumnotatie * samen met de weekdag in korte notatie zoals 'Don' voor donderdag * / 

    De formaat functie

    De instantie van de DateTimeFormat object heeft een eigenschap accessor (getter) genaamd formaat die een functie retourneert die a opmaakt Datum gebaseerd op de locales en opties gevonden in de DateTimeFormat aanleg.

    De functie duurt a Datum object of onbepaald als een optioneel argument en retourneert een draad in het gevraagde datumformaat.

    Notitie: Als het argument dat ook is onbepaald of niet verstrekt, dan wordt de waarde van geretourneerd Date.now () in het gevraagde datumformaat.

    Dit is de syntaxis:

     nieuw Intl.DateTimeFormat (). format () // zendt de huidige datum terug in de runtime-datumindeling 

    En laten we nu een eenvoudige datumopmaak coderen.

    Laten we de taal wijzigen en de uitvoer bekijken.

    Nu is het tijd om naar opties te kijken.

    De toLocaleDateString methode

    In plaats van een formatter zoals in de bovenstaande voorbeelden te gebruiken, kunt u ook gebruiken Date.prototype.toLocaleString op dezelfde manier met de locales en opties argumenten, ze lijken op elkaar, maar het wordt aanbevolen om de DateTimeFormat object bij het omgaan met te veel datums in uw toepassing.

     var mydate = new Date ('2015/04/22'); var options = weekday: "short", year: "numeric", month: "long", day: "numeric"; console.log (mydate.toLocaleDateString ( 'en-GB', opties)); // geeft als resultaat "Wo, 22 april 2015" 

    Test of het locales worden ondersteund

    Om te controleren op de ondersteunde locales, we kunnen de methode gebruiken supportedLocalesOf van DateTimeFormat voorwerp. Het retourneert een array van alle ondersteunende landinstellingen of een lege array als geen van de landinstellingen wordt ondersteund.

    Laten we voor het testen een dummy-locale toevoegen “blah” in de lijst met te controleren locaties.

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

    Browserondersteuning

    Eind april 2015 ondersteunen grote browsers de Internationalization API.

    Referenties

    • ECMA Internationaal: ECMAScript Internationalization API Specification
    • IANA: Language Subtag Registry
    • Norbert's Corner: de ECMAScript Internationalization API