Definitívny spôsob formátovania dát pre medzinárodné stránky
Formáty dátumov sa líšia v závislosti od regiónu a jazyka, preto je vždy užitočné, ak môžeme nájsť spôsob, ako zobraziť dátumy používateľom, ktoré sú špecifické pre ich jazyk a región.
Späť v decembri 2012 vydal ECMA špecifikácie API pre internacionalizáciu pre JavaScript. Rozhranie API pre internacionalizáciu nám pomáha zobrazovať určité údaje v súlade s jazykovou a fyzickou špecifikáciou. To môže byť použité na identifikovať meny, časové pásma a viac.
V tomto príspevku sa budeme zaoberať formátovanie dátumu pomocou tohto rozhrania API.
Poznať lokalizáciu používateľa
Ak chcete zobraziť dátum podľa preferovaného prostredia používateľa, najprv musíme vedieť, aké je preferované miestne nastavenie. V súčasnej dobe je bezstarostný spôsob, ako vedieť, že je požiadať užívateľa; umožňujú používateľom vybrať si na webovej stránke preferované nastavenia jazyka a regiónu.
Ale ak to nie je možnosť, môžete interpretovať Accept-Language
žiadajte hlavičku alebo si prečítajte navigator.language
(pre Chrome a Firefox) alebo navigator.browserLanguage
(pre hodnoty IE).
Upozorňujeme, že nie všetky tieto možnosti vrátia preferovaný jazyk používateľského rozhrania prehliadača.
var jazyk_tag = window.navigator.browserLanguage || window.navigator.language || "En"; // vráti jazykové značky ako 'en-GB'
Skontrolujte rozhranie API pre internacionalizáciu
Ak chcete vedieť, či prehliadač podporuje rozhranie API rozhrania Internationalization, alebo nie, môžeme skontrolovať prítomnosť globálneho objektu Intl
.
if (window.hasOwnPropertyâ €‹("Intl") && typeof Intl === "objekt") // Interpretácia API je prítomná, použite to
Intl objekt
Intl
je globálnym objektom pre použitie API pre internacionalizáciu. Má tri vlastnosti, ktoré sú konštruktormi pre tri objekty Collator
, numberformat
, a DateTimeFormat
.
Objekt, ktorý budeme používať, je DateTimeFormat
čo nám pomôže formátovať dátumový termín podľa rôznych jazykov.
DateTimeFormat objekt
DateTimeFormat
konštruktér má dve voliteľné argumenty;
locales
- reťazec alebo pole reťazcov, ktoré reprezentujú jazykové značky, napríklad; “de” pre nemecký jazyk, “sk-SK” pre anglické používané v Spojenom kráľovstve. Ak sa jazyková značka nezmieňuje, predvolené prostredie bude bežným jazykom behu.možnosti
- objekt, ktorého vlastnosti sa používajú na prispôsobenie formátovača. Má nasledujúce vlastnosti:
vlastnosť | popis | Možné hodnoty |
deň | Deň v mesiaci | “2-miestne”, “číselná” |
éra | Dátum, kedy spadá do, Ex: BC | “úzky”, “krátky”, “dlho” |
formatMatcher | Algoritmus použitý na prispôsobenie formátu | “basic”, “najlepšie”[štandardné] |
hodina | Predstavuje hodiny v čase | “2-miestne”, “číselná” |
hour12 | Označuje 12-hodinový formát (pravdivý ) alebo 24-hodinový formát (nepravdivý ) | pravdivý , nepravdivý |
localeMatcher | Algoritmus použitý na prispôsobenie miest | “vyhľadať”, “najlepšie”[štandardné] |
minúta | Minúty v čase | “2-miestne”, “číselná” |
mesiac | Mesiac za rok | “2-miestne”, “číselná”, “úzky”, “krátky”, “dlho” |
druhý | Sekundy v čase | “2-miestne”, “číselná” |
časové pásmo | Časové pásmo, ktoré chcete použiť | “UTC”, predvolená je časová zóna runtime |
timeZoneName | Časové pásmo dátumu | “krátky”, “dlho” |
všedný deň | Deň v týždni | “úzky”, “krátky”, “dlho” |
rok | Rok dátumu | “2-miestne”, “číselná” |
Príklad:
var formátovač = nový Intl.DateTimeFormat ('en-GB'); / * vracia formátovač, ktorý môže formátovať dátum vo formáte britského anglického dátumu * /
var options = weekday: 'short'); var formatter = nový Intl.DateTimeFormat ('en-GB', možnosti); / * vracia formátovač, ktorý môže formátovať dátum vo formáte britského anglického dátumu * spolu s denným dňom v krátkej notácii ako "Štvrtok" pre štvrtok * /
formát funkcie
Príklad inštancie DateTimeFormat
objekt má vlastník accessor (getter) nazvaný formát
ktorý vráti funkciu, ktorá formátuje a dátum
založený na locales
a možnosti
nájdené v DateTimeFormat
inštancie.
Funkcia trvá a dátum
objekt alebo nedefinovaný
ako voliteľný argument a vráti a povrázok
v požadovanom formáte dátumu.
Poznámka: Ak je argument buď nedefinovaný
alebo neposkytol, potom vráti hodnotu Date.now ()
v požadovanom formáte dátumu.
Tu je syntax:
nový formát Intl.DateTimeFormat (). () // vráti aktuálny dátum vo formáte dátumu spustenia
A teraz napíšeme jednoduché formátovanie dátumu.
Zmeňte jazyk a pozrite sa na výstup.
Teraz je čas pozrieť sa na možnosti.
toLocaleDateString metóda
Namiesto použitia formátovača, ako je uvedené v príkladoch uvedených vyššie, môžete tiež použiť Date.prototype.toLocaleString
rovnakým spôsobom ako locales
a možnosti
argumenty, sú podobné, ale odporúča sa použiť DateTimeFormat
objekt pri riešení príliš veľa dátumov vo vašej prihláške.
var mydate = new Dátum ('2015/04/22'); var options = deň v týždni: "krátky", rok: "numerický", mesiac: "dlhý", deň: "číselný"; console.log (mydate.toLocaleDateString ( 'sk-SK', možnosti)); // vráti "St, 22. apríla 2015"
Skúste, či locales sú podporované
Kontrola podporovaných položiek locales
, metódu môžeme použiť supportedLocalesOf
z DateTimeFormat
objekt. Vracia pole všetkých podporujúcich lokalizácií alebo prázdne pole, ak nie je podporovaná žiadna z lokalizácií.
Pri testovaní pridajte fiktívne prostredie “bla” v zozname lokalít, ktoré sa majú skontrolovať.
console.log (Intl.DateTimeFormat.supportedLocalesOf (["zh", "blah", "fa-pes"))); // vráti Array ["zh", "fa-pes"]
Podpora prehliadača
Koncom apríla 2015 podporujú hlavné prehliadače rozhranie API pre internacionalizáciu.
Referencie
- ECMA Medzinárodné: Špecifikácia rozhrania API medzinárodnej ECMAScript
- IANA: Registrácia jazykových subtagov
- Norbertov roh: rozhranie ECMAScript Internationalization API