Obsługa dat i godzin w JavaScript

W JavaScript wszystko związane z datą i godzinami praktycznie zamyka się w jednej klasie Date. Jej dokumentację możemy przeczytać na Mozilla Developer Network: Date. Obsługa czasu w JavaScript jest dosyć uboga, w szczególności w porównaniu do innych języków programowani np. w Javie, w której mamy multum przeróżnych klas do obsługi dat, godzin, stref czasowych, parserów, kalendarzy itd.

Trochę historii

Klasa Date w JavaScripcie powstała na wzór tej w Javie 1.0 java.util.Date. Historyczną dokumentację JDK 1.0.2. klasy Date z 1996 roku możemy znaleźć np. w Internet Archive WaybackMachine (oczywiście jeszcze na stronie Sun, przed przejęciem przez Oracle). Jak widzimy konstruktory i metody są niemal identyczne. W Javie przez lata biblioteki bardzo się rozwinęły, a w JavaScripcie jakby się czas zatrzymał. Przez to pozostały niewygodne w użyciu konstrukcje, ale musimy sobie z tym poradzić.

Źródło: http://www.wykop.pl/wpis/16780451/programowanie-javascript-heheszki-humorinformatyko/

Źródło: http://www.wykop.pl/wpis/16780451/programowanie-javascript-heheszki-humorinformatyko/

Jak widzimy na grafice powyżej, w JavaScript jest metoda getYear(), która, możemy się domyślać, zwraca rok. Dlaczego więc zwróciła liczbę 116? Jak możemy przeczytać w dokumentacji, getYear() zwraca rok minus 1990. Dla lat przed 2000 mogło być to wygodne (np. dla roku 1996 zwracało 96). Jednak w tym przypadku: 2016-1900=116. Na szczęście ta metoda została oznaczona jako przestarzała. Zamiast niej jest getFullYear() zwracająca pełny rok.

API dat w JavaScript

Dostępne są cztery konstruktory klasy Date:

  • Pusty, dzięki któremu ustawiony zostanie aktualny czas:
  • Z parametrem przyjmującym czas w formacie uniksowym w milisekundach (liczba milisekund od 1 stycznia 1970 roku). Przykładowo:
  • Podawane wartości dla każdej jednostki czasu (rok i opcjonalnie miesiąc, dzień, godzina, minuty, sekundy, milisekundy):

    Trzeba pamiętać, że w JavaScript miesiąc jest reprezentowany przez liczby od 0 do 11. Przykładowo:
  • Tekst (string) zawierający datę w odpowiednim formacie np. ISO 8601 tj. YYYY-MM-DDTHH:mm:ss.sssZ. Przykładowo:

I cały zestaw getterów i setterów. Możemy pobrać np. godzinę z daty getHours() lub ustawić minuty setMinutes(liczbaMinut). Ogólnie wygląda to tak: get lub set i nazwa jednostki czasowej np. Miliseconds, Seconds, Minutes, Hours, FullYear (a nie samo Year jak wyżej opisywane). W tabeli poniżej przedstawiono zestawienie.

get set
milisekundy getMiliseconds() setMiliseconds(liczbaMilisekund)
sekundy getSeconds() setSeconds(liczbaSekund)
minuty getMinutes() setMinutes(liczbaMinut)
godziny getHours() setHours(liczbaGodzin)
dzień tygodnia (0-6) getDay()
dzień miesiąca (1-31) getDate() setDate()
miesiąc (0-11) getMonth() setMonth()
rok getFullYear() setFullYear(rok)

Jest jeszcze kilka dodatkowych metod, które możemy sprawdzić w dokumentacji np. getTime() zwracający czas uniksowy w milisekundach.

Dzięki wyżej wymienionym metodom możemy modyfikować wcześniej stworzony obiekt z datą. Przykład:

Do interaktywnej zabawy z JavaScript można użyć np. konsoli przeglądarki (F12 w Chrome, zakładka „Console”):

Konsola Chrome godziny

Konsola Chrome

Zewnętrzne biblioteki

I to na tyle z pomocy samego JavaScriptu z obsługą dat i godzin. O resztę musimy zadbać sami. Istnieją zewnętrzne biblioteki usprawniające pracę np.

Jednak do prostej czynności (np. dodanie dwóch godzin do siebie) nie chcemy używać zewnętrznej biblioteki (bo zawsze to dodatkowe utrzymanie kodu, aktualizacje np. bezpieczeństwa, dodatkowe obciążenie – nawet jak biblioteka jest mała, to jednak dodatkowe połączenie do serwera; chyba żeby konkatenować pliki JavaScriptowe).

Ale do bardziej zaawansowanych zadań z czasem lub po prostu większej ich liczby polecam użyć którejś biblioteki.

2 responses on “Obsługa dat i godzin w JavaScript

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *