Na stronie czy aplikacji internetowej często wykorzystuje się wyświetlanie daty lub czasu. JavaScript daje świetne narzędzie do jego formatowania, tak aby data jak i czas były odpowiednio sformatowane, uwzględniając język użytkownika, a dokładniej język przeglądarki internetowej.
Poniżej demo ze wszystkimi omawianymi przykładami.
Formatowanie daty i czasu
Do formatowania daty i czasu użyjemy obiektu Intl.DateTimeFormat
, który przyjmuje wiele różnych parametrów.
Ogólne formatowanie daty i czasu
Na początek wyświetlmy pełną datę i godzinę.
Podstawowe formatowanie daty i czasu
const formatBasicA = new Intl.DateTimeFormat("pl-PL", {
dateStyle: "full",
timeStyle: "medium",
});
console.log(formatBasicA.format(new Date()));
// Wynik konsoli (data w konsoli będzie uzależniona od dnia odpalenia skryptu)
// środa, 11 września 2024 19:34:20
W tej formie obiekt Intl.DateTimeFormat
, przyjmuje następujące parametry:
"pl-PL"
– kod języka na przykładpl-PL
,en-US
, podającundefined
, zostanie użyty domyślny język przeglądarki użytkownika.dateStyle
– służy do formatowania daty, przyjmuje następujące parametryfull
– pełna data z nazwą tygodnia i miesiąca,long
– nazwy miesięcy, ale bez dnia tygodnia,medium
– skrócone nazwy miesięcy,short
– numeryczna reprezentacja daty,
timeStyle
– służy do formatowania czasufull
– godzina, minuty, sekundy, często z nazwą strefy czasowej,long
– godzina, minuty, sekundy (czasami bez strefy czasowej)medium
– godzina i minutyshort
– Minimalna forma godziny i minut
Zmodyfikujemy powyższy przykład i wyświetlmy dzisiejszą datę w nie co innym formacie i w języku angielskim
const formatBasicB = new Intl.DateTimeFormat("en-US", {
dateStyle: "full",
timeStyle: "long",
});
console.log(formatBasicB.format(new Date()));
// Wynik konsoli (data w konsoli będzie uzależniona od dnia odpalenia skryptu)
// Wednesday, September 11, 2024 at 7:58:55 PM GMT+2
Dokładniejsze formatowanie daty
Obiekt Intl.DateTimeFormat
, daje możliwość dokładniejszego formatowania daty za pomocą następujących parametrów:
year
– rok, przyjmuje formatowanienumeric
– wyświetli rok w postaci2024
2-digit
– wyświetli rok w postaci24
month
– miesiąc, przyjmuje formatowanienumeric
– wyświetli miesiąc w postaci od1
do12
2-digit
– wyświetli miesiąc w postaci od 01
do12
narrow
– wyświetli skróconą nazwę miesiącaw
dla wrzesieńshort
– wyświetli krótką nazwę miesiącawrz
dla wrzesieńlong
– wyświetli pełną nazwę miesiącawrzesień
. Nazwa miesiąca zostanie odpowiednio formatowana w zależności od dnia miesiąca, na przykład12 października
a nie
.12 październik
day
– dzień, przyjmuje formatowanienumeric
– wyświetli dzień w postaci1
2-digit
– wyświetli dzień w postaci01
weekday
– dzień tygodnia, przyjmuje formatowanienarrow
– wyświetli skróconą nazwę dniaś
dla środyshort
– wyświetli krótką nazwę dniaśr
dla środylong
– wyświetli pełną nazwę dniaśroda
Poniżej przykład wyświetlający datę tylko w postaci cyfr.
Data w postaci cyfr, format zgodnie z ustawieniem przeglądarki
const formatDateA = new Intl.DateTimeFormat(undefined, {
year: "numeric",
month: "2-digit",
day: "numeric",
});
console.log(formatDateA.format(new Date()));
// Wynik konsoli (data w konsoli będzie uzależniona od dnia odpalenia skryptu)
// 11.09.2024
Jeżeli zmienimy formatowanie undefined
na en-US
, to ta sama data, zostanie wyświetlona według zasady, którą stosują w USA czyli miesiąc/dzień/rok.
Format daty według zasady z USA
const formatDateB = new Intl.DateTimeFormat("en-US", {
year: "numeric",
month: "2-digit",
day: "numeric",
});
console.log(formatDateB.format(new Date()));
// Wynik konsoli (data w konsoli będzie uzależniona od dnia odpalenia skryptu)
// 09/11/2024
Dokładniejsze formatowanie czasu
Tak samo jak w przypadku daty, również czas może formatować według własnych preferencji, za pomocą następujących parametrów:
hour
– godzina, przyjmuje formatowanienumeric
– wyświetli godzinę w postaci1
2-digit
– wyświetli godzinę w postaci01
minute
– minuta, przyjmuje formatowanienumeric
– wyświetli minutę w postaci1
2-digit
– wyświetli minutę w postaci01
second
– sekunda, przyjmuje formatowanienumeric
– wyświetli sekunda w postaci1
2-digit
– wyświetli sekunda w postaci01
timeZoneName
– strefa czasowa, przyjmuje formatowanieshort
– wyświetli skróconą nazwę strefy na przykładGMT
,PST
long
– wyświetli pełną nazwę strefy na przykładGreenwich Mean Time
era
– era (przed naszą erą, naszej ery), przyjmuje formatowanienarrow
– wyświetli skróconą nazwę eryshort
– wyświetli krótką nazwę erylong
– wyświetli pełną nazwę ery
fractionalSecondDigits
– określa liczbę miejsc po przecinku od1
do3
Poniżej przykład wyświetlający aktualną godzinę.
Aktualna godzina
const formatTimeA = new Intl.DateTimeFormat(undefined, {
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
});
console.log(formatTimeA.format(new Date()));
// Wynik konsoli (czas w konsoli będzie uzależniony od godziny odpalenia skryptu)
// 11:15:43
Nic nie stoi na przeszkodzie, aby wyświetlić datę oraz czas jako całość z własnymi preferencjami.
Data i czas
const formatTimeB = new Intl.DateTimeFormat(undefined, {
year: "numeric",
month: "long",
day: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
weekday: "long",
timeZone: "Europe/Warsaw",
timeZoneName: "short",
});
console.log(formatTimeB.format(new Date()));
// Wynik konsoli (data i czas w konsoli będzie uzależniony od dnia i godziny odpalenia skryptu)
// środa, 11 września 2024 20:18:40 CEST
Relatywne formatowanie daty i czasu
Relatywne formatowanie daty i czasu, polega na opisowym upływie daty lub czasu, licząc od dnia dzisiejszego lub czasu teraźniejszego. Na przykład że coś wydarzyło się „2 dni temu” lub „1 godzinę temu”. Do tego posłuży nam obiekt Intl.RelativeTimeFormat
.
Relatywne formatowanie daty
const formatRelativeA = new Intl.RelativeTimeFormat(undefined, {
localeMatcher: "best fit",
numeric: "always",
style: "short",
});
console.log(formatRelativeA.format(-1, "day"));
// Wynik konsoli
// 1 dzień temu
Obiekt Intl.RelativeTimeFormat
, przyjmuje następujące parametry
"pl"
– język na przykładpl
,en
, podającundefined
, zostanie użyty domyślny język przeglądarki użytkownika.options
– opcje formatowanialocaleMatcher
– algorytm dopasowania języka. Przyjmuje:lookup
– domyślnybest fit
numeric
– określa czy wartość ma być przedstawiona numerycznie czy tekstowo, przyjmujealways
– jako liczby na przykład1 dzień temu
auto
– domyślnie, wyświetliwczoraj
zamiast1 dzień temu
style
– określa styl wyświetlania, przyjmujelong
– domyślnie, używa długich form na przykład1 dzień temu
short
– używa krótszych form1 mies. temu
narrow
– używa możliwie najkrótszych form
W zależności czy chcemy wyświetlać informację o dniach, miesiącach czy latach, lub godzinach, minutach czy sekundach, musimy zmienić parametr day
w format
.
day
– wyświetli informację1 dzień temu
month
– wyświetli informację1 miesiąc temu
year
– wyświetli informację1 rok temu
second
– wyświetli1 sekundę temu
minute
– wyświetli1 minutę temu
hour
– wyświetli1 godzinę temu
Zmiana parametru w format
const formatRelativeB = new Intl.RelativeTimeFormat(undefined, {
localeMatcher: "best fit",
numeric: "always",
style: "narrow",
});
console.log(formatRelativeB.format(-100, "day"));
console.log(formatRelativeB.format(-10, "month"));
console.log(formatRelativeB.format(-1, "year"));
// Wynik konsoli
// 100 dni temu
// 10 mies. temu
// 1 rok temu
W praktyce
Formatowanie daty i czasu najczęściej można spotkać w panelach administracyjnych oraz aplikacjach do zarządzania projektami lub czymś podobnym. Najlepszym przykładem będzie tu aplikacja Asana, w której każda zmiana w zadaniu jest opisywana na przykład 1 godzina temu
lub 10 dni temu
. Dla tak globalnej aplikacji korzyść płynąca z używania Intl.DateTimeFormat
lub Intl.RelativeTimeFormat
, jest taka że nie trzeba martwić się o tłumaczenie. O ile używają tych obiektów w swoim kodzie.
Podobał się artykuł?
Komentarze
Brak komentarzy. Bądź pierwszą osobą, która zostawi komentarz!