Ett definitivt sätt att formatera datum för internationella webbplatser
Datumformat varierar med region och språk så det är alltid till hjälp om vi kan hitta sätt att visa datum för användarna, specifika för deras språk och region.
Tillbaka i december 2012 släppte ECMA specifikationerna för Internationalization API för JavaScript. Internationaliserings API hjälper oss att visa viss data enligt språkspecifikationen. Det kan användas till identifiera valutor, tidszoner och mer.
I det här inlägget kommer vi att titta på datumformatering använder detta API.
Känn användarens språk
För att visa datumet enligt användarens föredragna språk, måste vi först veta vad det föredragna landet är. För närvarande är det dåligt säkra sättet att veta det att fråga användaren; Låt användarna välja sina föredragna språk- och regioninställningar på webbsidan.
Men om det inte är ett alternativ kan du tolka Accept-Language
begära rubrik eller läs navigator.language
(för Chrome och Firefox) eller navigator.browserLanguage
(för IE) -värden.
Tänk på att inte alla dessa alternativ returnerar det språk som används i webbläsarens användargränssnitt.
var language_tag = window.navigator.browserLanguage || window.navigator.language || "En"; // returnerar språkkoder som "en-GB"
Kolla på Internationalization API
För att veta om webbläsaren stöder Internationalization API eller inte, kan vi kontrollera om det globala objektet finns Intl
.
if (window.hasOwnPropertyâ €‹("Intl") && typof Intl === "objekt") // Internationalization API är närvarande, låt oss använda det
De Intl objekt
Intl
är ett globalt objekt för att använda Internationalization API. Det har tre egenskaper som är konstruktörer för tre objekt nämligen Collator
, Number
, och DateTimeFormat
.
Föremålet vi ska använda är DateTimeFormat
vilket hjälper oss att formatera datumtid enligt olika språk.
De DateTimeFormat objekt
De DateTimeFormat
konstruktören tar två valfria argument;
locales
- en sträng eller en rad strängar som representerar språkområdena, till exempel; “de” för tyska språket, “sv-SE” för engelska som används i Storbritannien. Om en språktagg inte nämns, är standard-landstiden den som körtid.alternativ
- ett objekt vars egenskaper används för att anpassa formateraren. Den har följande egenskaper:
Fast egendom | Beskrivning | Möjliga värden |
dag | Månadens dag | “2-siffrigt”, “numerisk” |
epok | Tidsdatumet faller till, ex: BC | “smal”, “kort”, “lång” |
formatMatcher | Den algoritm som används för att matcha format | “grundläggande”, “bästa passform”[Standard] |
timme | Representerar timmar på tiden | “2-siffrigt”, “numerisk” |
hour12 | Indikerar 12-timmarsformat (Sann ) eller 24-timmarsformat (falsk ) | Sann , falsk |
localeMatcher | Algoritmen används för lokal matchning | “slå upp”, “bästa passform”[Standard] |
minut | Protokoll i tiden | “2-siffrigt”, “numerisk” |
månad | Månad på ett år | “2-siffrigt”, “numerisk”, “smal”, “kort”, “lång” |
andra | Sekunder i tiden | “2-siffrigt”, “numerisk” |
tidszon | Tidszon att tillämpa | “UTC”, standard är runtime tidzon |
timeZoneName | Datumets tidzon | “kort”, “lång” |
veckodag | Dag i veckan | “smal”, “kort”, “lång” |
år | År av dagen | “2-siffrigt”, “numerisk” |
Exempel:
var formatter = ny Intl.DateTimeFormat ('sv-GB'); / * returnerar en formaterare som kan formatera ett datum i brittisk engelsk datumformat * /
var options = vardag: 'short'; var formatter = ny Intl.DateTimeFormat ('en-GB', alternativ); / * returnerar en formaterare som kan formatera ett datum i brittisk engelsk datumformat * tillsammans med veckodagen i kort notation som "Thu" för torsdag * /
De formatera fungera
Förekomsten av DateTimeFormat
objektet har en egenskapsaccessor (getter) kallad formatera
som returnerar en funktion som formaterar a Datum
baserat på locales
och alternativ
hittades i DateTimeFormat
exempel.
Funktionen tar a Datum
objekt eller odefinierad
som ett valfritt argument och returnerar a sträng
i önskat datumformat.
Notera: Om argumentet är heller odefinierad
eller inte tillhandahålls, returnerar det värdet av Date.now ()
i önskat datumformat.
Här är syntaxen:
nya Intl.DateTimeFormat (). format () // kommer att returnera det aktuella datumet i runtime-datumformatet
Och nu låt oss koda en enkel datumformatering.
Låt oss ändra språket och se produktionen.
Nu är det dags att titta på alternativ.
De toLocaleDateString metod
I stället för att använda en formaterare som visas i ovanstående exempel kan du också använda Date.prototype.toLocaleString
på samma sätt med locales
och alternativ
argument, de är likartade men det rekommenderas att använda DateTimeFormat
objekt när du hanterar för många datum i din ansökan.
var mydate = nytt datum ("2015/04/22"); var options = veckodag: "kort", år: "numerisk", månad: "lång", dag: "numerisk"; console.log (mydate.toLocaleDateString ( 'en-GB', optioner)); // returnerar "onsdag 22 april 2015"
Testa om locales stöds
Att kontrollera om det stöds locales
, vi kan använda metoden supportedLocalesOf
av DateTimeFormat
objekt. Den returnerar en uppsättning av alla stödjande adresser eller en tom matris om ingen av platserna stöds.
För testning, låt oss lägga till en dummy-plats “bla” i listan över platser som ska kontrolleras.
console.log (Intl.DateTimeFormat.supportedLocalesOf (["zh", "blah", "fa-pes"))); // returnerar Array ["zh", "fa-pes"]
Webbläsarsupport
I slutet av april 2015 stödjer stora webbläsare Internationalization API.
referenser
- ECMA Internationellt: API-specifikation för ECMAScript Internationalization
- IANA: Språk Subtag Register
- Norbert's Corner: ECMAScript Internationalization API