Ostateczny sposób formatowania dat dla witryn międzynarodowych
Formaty dat różnią się w zależności od regionu i języka, dlatego zawsze pomocne jest znalezienie sposobu wyświetlania dat użytkownikom, w zależności od ich języka i regionu.
W grudniu 2012 r. ECMA opublikowała specyfikację Internationalization API dla JavaScript. Interfejs API internacjonalizacji pomaga nam wyświetlać pewne dane zgodnie z językiem i specyfikacją treści. Można to wykorzystać identyfikuj waluty, strefy czasowe i więcej.
W tym poście będziemy się przyglądać formatowanie daty używając tego API.
Poznaj ustawienia regionalne użytkownika
Aby wyświetlić datę według preferowanych ustawień narodowych użytkownika, najpierw musimy wiedzieć, co to jest preferowane ustawienia regionalne. Obecnie niezawodny sposób na to, aby zapytać użytkownika; pozwól użytkownikom wybrać preferowane ustawienia języka i regionu na stronie internetowej.
Ale jeśli to nie jest opcja, możesz zinterpretować Akceptuj-język
żądaj nagłówka lub przeczytaj język nawigatora
(dla Chrome i Firefox) lub navigator.browserLanguage
(dla IE) wartości.
Pamiętaj, że nie wszystkie te opcje zwracają preferowany język interfejsu przeglądarki.
var language_tag = window.navigator.browserLanguage || window.navigator.language || „en”; // zwraca znaczniki języka, takie jak „en-GB”
Sprawdź API internacjonalizacji
Aby wiedzieć, czy przeglądarka obsługuje API internacjonalizacji, czy nie, możemy sprawdzić obecność globalnego obiektu Intl
.
if (window.hasOwnProperty‹("Intl") && typeof Intl === "object") // Interfejs internacjonalizacji jest obecny, użyjmy tego
The Intl obiekt
Intl
jest obiektem globalnym do korzystania z API internacjonalizacji. Ma trzy właściwości, które są konstruktorami dla trzech obiektów, mianowicie Zbieracz
, Format liczbowy
, i DateTimeFormat
.
Obiekt, którego będziemy używać, to DateTimeFormat
co pomoże nam sformatować datę w różnych językach.
The DateTimeFormat obiekt
The DateTimeFormat
konstruktor przyjmuje dwa opcjonalne argumenty;
lokalizacje
- ciąg lub tablica ciągów znaków, które reprezentują na przykład znaczniki językowe; “de” dla języka niemieckiego, “pl-GB” dla języka angielskiego używanego w Wielkiej Brytanii. Jeśli znacznik języka nie jest wymieniony, domyślnym ustawieniem narodowym będzie język wykonawczy.opcje
- obiekt, którego właściwości są używane do dostosowania formatyzatora. Ma następujące właściwości:
własność | Opis | Możliwa wartość |
dzień | Dzień miesiąca | “2-cyfrowy”, “numeryczny” |
era | Era data przypada, np .: BC | “wąski”, “krótki”, “długie” |
formatMatcher | Algorytm używany do dopasowywania formatu | “podstawowy”, “najlepiej dopasowana”[Domyślna] |
godzina | Reprezentuje godziny w czasie | “2-cyfrowy”, “numeryczny” |
godzina12 | Wskazuje format 12-godzinny (prawdziwe ) lub format 24-godzinny (fałszywy ) | prawdziwe , fałszywy |
localeMatcher | Algorytm używany do dopasowywania ustawień regionalnych | “wyszukiwanie”, “najlepiej dopasowana”[Domyślna] |
minuta | Minuty w czasie | “2-cyfrowy”, “numeryczny” |
miesiąc | Miesiąc za rok | “2-cyfrowy”, “numeryczny”, “wąski”, “krótki”, “długie” |
druga | Sekundy w tym czasie | “2-cyfrowy”, “numeryczny” |
strefa czasowa | Strefa czasowa do zastosowania | “UTC”, domyślna jest strefa czasowa czasu wykonywania |
timeZoneName | Strefa czasowa daty | “krótki”, “długie” |
dzień powszedni | Dzień tygodnia | “wąski”, “krótki”, “długie” |
rok | Rok daty | “2-cyfrowy”, “numeryczny” |
Przykład:
var formatter = new Intl.DateTimeFormat ('en-GB'); / * zwraca formater, który może sformatować datę w brytyjskim formacie daty * /
var options = weekday: 'short'; var formatter = new Intl.DateTimeFormat ('en-GB', opcje); / * zwraca formatyzator, który może sformatować datę w brytyjskim formacie daty * wraz z dniem tygodnia w skrócie, np. „Czw” na czwartek * /
The format funkcjonować
Instancja DateTimeFormat
obiekt ma wywoływany atrybut dostępu (getter) format
która zwraca funkcję, która formatuje a Data
na podstawie lokalizacje
i opcje
znalezione w DateTimeFormat
instancja.
Funkcja przyjmuje Data
obiekt lub niezdefiniowany
jako argument opcjonalny i zwraca a strunowy
w żądanym formacie daty.
Uwaga: Jeśli argument jest albo niezdefiniowany
lub nie podany, wtedy zwraca wartość Date.now ()
w żądanym formacie daty.
Oto składnia:
new Intl.DateTimeFormat (). format () // zwróci bieżącą datę w formacie daty wykonania
A teraz kodujemy proste formatowanie daty.
Zmieńmy język i zobaczmy wynik.
Teraz nadszedł czas, aby zajrzeć do opcji.
The toLocaleDateString metoda
Zamiast używać formatyzatora, jak pokazano w powyższych przykładach, możesz również użyć Date.prototype.toLocaleString
w ten sam sposób z lokalizacje
i opcje
argumenty są podobne, ale zaleca się użycie DateTimeFormat
obiekt, gdy mamy do czynienia ze zbyt dużą liczbą dat w aplikacji.
var mydate = new Date ('2015/04/22'); var options = weekday: "short", year: "numeric", month: "long", day: "numeric"; console.log (mydate.toLocaleDateString ('en-GB', opcje)); // zwraca „środa, 22 kwietnia 2015 r.”
Sprawdź, czy lokalizacje są obsługiwane
Aby sprawdzić obsługiwane lokalizacje
, możemy użyć tej metody supportedLocalesOf
z DateTimeFormat
obiekt. Zwraca tablicę wszystkich obsługiwanych ustawień narodowych lub pustą tablicę, jeśli żadna z lokalizacji nie jest obsługiwana.
Do testów dodajmy obojętne ustawienia regionalne “bla” na liście lokalizacji do sprawdzenia.
console.log (Intl.DateTimeFormat.supportedLocalesOf (["zh", "blah", "fa-pes"])); // zwraca tablicę ["zh", "fa-pes"]
Obsługa przeglądarki
Pod koniec kwietnia 2015 r. Główne przeglądarki obsługują API internacjonalizacji.
Referencje
- ECMA International: ECMAScript Internationalization API Specification
- IANA: Rejestr subtagów językowych
- Norbert's Corner: API internacjonalizacji ECMAScript