Baza wiedzy
Często spotykamy się z problemem poprawnego formatowania i parsowania daty i czasu, jak i jego przesyłaniem i przechowywaniem. Podstawowe typy danych w Javascripcie oferują jedną klasę Date, która nadaje się do podstawowych zadań, ale jeżeli chcemy mieć większą kontrolę i swobodę w manipulacji czasem, musimy skorzystać z zewnętrznej biblioteki.
Doskonałym przykładem jest wspomniana w tytule biblioteka moment.js, która nie ma żadnego poważniejszego konkurenta w swojej branży.
Użycie jej jest banalnie proste i zostało przygotowane do wszystkich najważniejszych typów projektów: od zwykłego użycia zminifikowanej wersji bezpośrednio w tagu script, aż do użycia w projekcie node.js z użyciem npm lub nuget. Jeśli piszemy w TypeScript, w pakiecie dostajemy typy, dzięki czemu nie trzeba doinstalowywać typów z DefinitelyTyped.
Biblioteka ta pokrywa ogromny obszar zastosowań. Zacznijmy od prostego przykładu utworzenia podstawowego obiektu moment:var m = moment();
Powyższa konstrukcja tworzy obiekt moment reprezentujący aktualny czas. Gdy powyższą funkcję wywołamy z parametrem, możemy się spodziewać różnego zachowania w zależności od typu parametru. Przede wszystkim w obiekt moment możemy "zapakować" obiekt typu Date. Jeżeli podamy liczbę, wówczas zostanie to potraktowane jako uniksowy timestamp wyrażony w milisekundach. Jeżeli zaś podamy string, wówczas nastąpi próba parsowania tego napisu do daty. Biblioteka jest oczywiście przygotowana na różne warianty formatu daty i czasu, od typowo amerykańskich formatów do bardziej swojsko wyglądających formatów typu 'YYYY-MM-DD'. Co ważne, jeżeli parsowanie się nie uda, wówczas nie zauważymy żadnego błędu czy wyjątku - obiekt o dziwo zostanie utworzony, ale poprawność obiektu możemy sprawdzić uruchamiając metodę isValid(). Poza podaniem stringa do parsowania możemy podać jeszcze konkretny format:var m = moment('2018-10-14', 'YYYY-MM-DD');
Jeśli nie jesteśmy pewni co do użytego formatu, możemy podać ich więcej. Wtedy drugi parametr ma postać tablicy stringów.
Myślę, że tak szeroki wachlarz możliwości parsowania daty zadowoli każdego, kto choć raz musiał się zmierzyć z walidacją danych wprowadzanych przez użytkownika. Dotyczy to przede wszystkim frontendu, ale nic nie stoi na przeszkodzie, aby bibliotekę zaprząc do pracy po stronie backendu i walidować dane przychodzące np. z REST-a.
Kolejną ważną cechą biblioteki jest możliwość manipulowania czasem. Mamy do dyspozycji tak podstawowe metody, jak ustawianie poszczególnych fragmentów daty/czasu. Ale najbardziej cenię możliwość dodawania i odejmowania. Myślę, że spotkaliście się nie raz z problemem typu "kiedy to będzie trzy miesiące od 29 lutego" lub inne tego typu dziwne sytuacje. Robimy wówczas tak:moment().add(3, 'months');
Analogicznie działa metoda substract. Jeżeli z kolei mamy datę, w której chcielibyśmy wyzerować czas do północy, wówczas przyda nam się taka metoda:moment().startOf('day');
Jedna ważna uwaga - wszelkie operacje na obiekcie moment zmieniają go. Uważajmy więc na sytuacje, w których przekazujemy obiekt moment do jakiejś funkcji, w której wykonamy w/w operację. Bo jeżeli nie było to naszą intencją, przekazany obiekt zostanie zmieniony. Żeby się przed tym ustrzec, musimy wykonać kopię przekazanego obiektu za pomocą metody clone().
Przesyłanie daty pomiędzy frontendem i backendem najlepiej realizować poprzez przesyłanie jej w unixowym timestampie, wówczas przydatna będzie metoda o intuicyjnej nazwie unix():
moment().unix();
No i ostatnia ważna rzecz, to jest formatowanie. Jest to de facto odwrotność parsowania i działają tutaj te same reguły formatowania, jakie są używane przy parsowaniu właśnie. Np.:
moment().format( 'YYYY-MM-DD');
Biblioteka ma całą masę innych metod, które w znacznym stopniu ułatwiają operacje na dacie i czasie:
- wyznaczanie różnicy pomiędzy dwiema datami wyrażoną w dowolnych jednostkach,
- porównywanie dwóch dat (czy wcześniejsza, późniejsza, taka sama),
- internacjonalizację (czyli w skrócie i18n :-),
- uwzględnianie stref czasowych.
Po szczegóły odsyłam do oficjalnej strony, na której znajdziemy szczegółową dokumentację.
Zainteresował Cię ten wpis?
Chcesz dowiedzieć się więcej?
Michał Gierwatowski
Programista wszechstronny, od języka Progress4GL począwszy, przez Javę, na TypeScripcie kończąc. Ponad piętnastoletnie doświadczenie w wytwarzaniu różnego rodzaju systemów informatycznych. Ostatnio interesuje się nowinkami w ekosystemie JavaScript/node.js
Michał.Gierwatowski(at)monolit-it.pl
Zobacz wszystkie artykuły danego autora »Ostatnie:
Najpopularniejsze TAGi:
Tagi
W swoim czasie linia produktowa stacjonarnych komputerów biznesowych Dell OptiPlex dzieliła się na kilka różnych modeli, a te z kolei podzielono na dodatkowe modele w danej linii produktowej opartej na niezbyt jasnej numeracji. Dla osoby nie obeznanej z nazewnictwem był to spory problem aby odnaleźć się w gąszczu dostępnych wersji.
O rozwiązaniach IoT pisze się najczęściej w kontekście przemysłu 4.0, czy inteligentnych miast. Rozwiązanie NetQM for IoT jest z sukcesem wdrażane w jednostkach samorządu terytorialnego jako System Monitorowania i Sterowania Siecią Kanalizacji Ciśnieniowej.
Firma Dell od samego początku charakteryzowała się dużą dbałością w kwestii zakresu gwarancyjnego dla swoich produktów. Nie inaczej wygląda sytuacja dziś i można zaryzykować stwierdzenie, że jest to niejako wyróżnik tej organizacji na tle jej konkurencji.
W ostatnim czasie pojawiło się kilka ciekawych rozwiązań zastosowanych przez producentów notebooków. Większość z nich jest jak najbardziej dostosowana do potrzeb potencjalnych użytkowników i wydaje się, że trafi prosto pod strzechy.
Od dawna mówi się o usługach czy przemyśle 4.0 w kontekście biznesu. Coraz częściej jednak rozmawia się również o usługach 4.0 skierowanych do samorządów... Przykład? System monitorowania i sterowania siecią kanalizacji niskociśnieniowej w oparciu o rozwiązanie NetQM for IoT.
Miniony rok, podobnie jak poprzednie lata, cechował się dużą zmiennością i zawirowaniami w różnych sferach naszego życia, w tym między innymi dotyczącymi cyberbezpieczeństwa. Znana firma analityczno-badawcza jaką jest Gartner, wykazała siedem głównych trendów związanych z bezpieczeństwem IT w roku 2022.
Bezpieczeństwo odmieniane przez wszystkie przypadki jest obecnie jedną z najczęściej podnoszonych kwestii w świecie IT. Dodatkowo w erze postpandemicznej, która spowodowała przejście do pracy zdalnej lub hybrydowej, doszło do decentralizacji ludzi i maszyn, a co za tym idzie, wzmogło konieczność skutecznej kontroli dostępu uprzywilejowanego.
Jeden z naszych klientów zwrócił się do nas w sprawie przedstawienia propozycji zakupu urządzeń, które umożliwiłyby przekształcenie w formę cyfrową jego bardzo dużych zasobów bibliotecznych.
Wzmocnione notebooki czy tez tablety to dosyć specyficzny wycinek rynku IT. Sprzęt ten często charakteryzuje się gorszymi parametrami technicznymi niż topowe produkty (choć to tez powoli ulega zmianie), ale ma coś czego typowo biznesowy sprzęt nie ma i mieć nie będzie.