Użyj new Date(), aby utworzyć nowy obiekt Date zawierający bieżącą datę i godzinę.

zauważ, że Data() wywołana bez argumentów jest równoważna nowa Data(Data.teraz()) .

Gdy masz już obiekt daty, możesz zastosować jeden z kilku dostępne metody aby pobrać jego właściwości (np. getFullYear(), aby uzyskać 4-cyfrowy rok).

Poniżej przedstawiono kilka typowych metod dat.

Pobierz bieżący rok

var rok = (nowa Date()).getFullYear(); dziennik konsoli (rok); // Przykładowe wyniki: 2016

Pobierz bieżący miesiąc

var miesiąc = (nowa Date()).getMonth(); dziennik konsoli (miesiąc); // przykładowe wyjście: 0

Zauważ, że 0 = styczeń. Dzieje się tak, ponieważ miesiące różnią się od 0 zanim 11 , więc często pożądane jest dodanie +1 do indeksu.

Pobierz bieżący dzień

varday = (nowa Data()).getDate(); dziennik konsoli (dzień); // przykładowe wyjście: 31

Pobierz aktualną godzinę

var godziny = (nowa Date()).getHours(); dziennik konsoli (godziny); // przykładowe wyjście: 10

Uzyskaj aktualne minuty

var minuty = (nowa Date()).getMinutes(); dziennik konsoli (minuty); // przykładowe wyjście: 39

Pobierz bieżące sekundy

var sekundy = (nowa Date()).getSeconds(); dziennik konsoli (drugi); // przykładowe wyjście: 48

Uzyskaj aktualne milisekundy

Aby uzyskać milisekundy (od 0 do 999) wystąpienia obiektu Date, użyj metody getMilliseconds.

var milisekund = (nowa Date()).getMilliseconds(); dziennik konsoli (milisekundy); // Dane wyjściowe: teraz milisekundy

Konwertuj bieżący czas i datę na ciąg czytelny dla człowieka

varnow = nowa Data(); // przekonwertuj datę na ciąg znaków w formacie strefy czasowej UTC: console.log(now.toUTCString()); // Wyjście: środa, 21 czerwca 2017 09:13:01 GMT

Metoda statyczna Date.now() zwraca liczbę milisekund od 1 stycznia 1970 00:00:00 UTC. Aby uzyskać liczbę milisekund, które minęły od tego czasu, korzystając z wystąpienia obiektu Date, użyj jego metody getTime.

// pobierz milisekundy za pomocą statycznej metody teraz Date console.log(Date.now()); // pobierz milisekundy za pomocą metody getTime of Date instancja console.log((new Date()).getTime());

Data i godzina są częścią naszego codziennego życia i dlatego zajmują ważne miejsce w programowaniu. W języku JavaScript podczas tworzenia strony internetowej może być konieczne dodanie kalendarza, rozkładu jazdy pociągów lub interfejsu do planowania spotkań. Te aplikacje powinny pokazywać odpowiednie godziny na podstawie bieżącej strefy czasowej użytkownika lub wykonywać obliczenia związane z przylotem i odlotem samolotu lub godziną rozpoczęcia i zakończenia wydarzenia. Ponadto może być konieczne użycie JavaScript do wysyłania codziennych raportów o określonych godzinach lub do filtrowania (na przykład w celu znalezienia restauracji, które są otwarte w określonych godzinach).

obiekt daty

Date to wbudowany obiekt JavaScript, który przechowuje datę i godzinę. Zapewnia szereg wbudowanych metod formatowania i manipulowania tymi danymi.

Domyślnie nowa instancja Date bez argumentów tworzy obiekt z bieżącą datą i godziną zgodnie z Ustawienia systemowe aktualny komputer.

Jako przykład spróbuj przypisać bieżącą datę do zmiennej. Utwórz plik now.js.

// Ustaw zmienną na bieżącą datę i godzinę
const now = new Date();
// wyświetl wyjście
Teraz;
środa 18 października 2017 12:41:34 GMT+0000 (UTC)

Wynikiem jest ciąg daty zawierający następujące dane:

Data i godzina są podzielone i wyświetlane w sposób łatwy do odczytania.

Jednak JavaScript interpretuje datę na podstawie uniksowego znacznika czasu, który jest wartością składającą się z liczby milisekund od północy 1 stycznia 1970 roku. Znacznik czasu można uzyskać za pomocą metody getTime().

// Pobierz aktualny znacznik czasu
teraz.getTime();
1508330494000

Duża liczba wyświetlana w danych wyjściowych jako bieżący znacznik czasu to liczba milisekund, które minęły od północy 1 stycznia 1970 r. do 18 października 2017 r.

Czas zero (lub czas epoki) jest reprezentowany przez ciąg daty 01 stycznia 1970 00:00:00 Universal Time (UTC) i znacznik czasu 0. Możesz to przetestować w przeglądarce, tworząc nową zmienną w epoch.js i przypisując mu nową instancję Date , na podstawie sygnatury czasowej 0.

// Przypisz znacznik czasu 0 do nowej zmiennej
const epochTime = new Date(0);
epokaCzas;
01 stycznia 1970 00:00:00 Czas uniwersalny (UTC)

Czas zerowy został wybrany jako standard do mierzenia czasu przez komputery i ta metoda jest używana w JavaScript. Ważne jest, aby zrozumieć znaczniki czasu i ciągi dat, ponieważ te pojęcia mogą być używane w zależności od ustawień i przeznaczenia aplikacji.

Teraz wiesz, jak utworzyć nową instancję Date na podstawie aktualnego czasu i znacznika czasu. W JavaScript są w sumie cztery formaty daty. Oprócz domyślnego bieżącego czasu i sygnatury czasowej można również użyć ciągu daty lub określić konkretną datę i godzinę.

Aby zademonstrować różne drogi odniesienia do określonej daty, spróbuj utworzyć nowe obiekty Date, które reprezentują 4 lipca 1776, 12:30 GMT na trzy różne sposoby.

// metoda znacznika czasu
nowa data (-610605800000);
// metoda ciągu daty
nowa data("31 stycznia 1980 12:30");
// metoda daty i godziny
nowa data (1776, 6, 4, 12, 30, 0, 0);

Wszystkie te przykłady przedstawiają tę samą datę i godzinę na trzy różne sposoby.

Jak widać, metoda znacznika czasu ma liczbę ujemną; dowolna data przed czasem zerowym będzie reprezentowana jako liczba ujemna.

W trzecim przykładzie sekundy i milisekundy są reprezentowane przez 0. Jeśli brakuje jakichkolwiek danych podczas tworzenia obiektu Date, należy przypisać je do 0. Brakujących danych nie można pominąć, ponieważ kolejność danych czasu w ciągu nie jest zmiana. Należy również zauważyć, że miesiąc lipiec jest tutaj oznaczony jako 6, a nie 7. Dzieje się tak dlatego, że odliczanie zaczyna się od 0, a nie 1. Więcej na ten temat w następnym rozdziale.

Pobieranie randki z get

Gdy masz randkę, możesz uzyskać dostęp do wszystkich jej składników za pomocą różnych wbudowanych metod. Metody zwracają każdą część daty względem lokalnej strefy czasowej. Każda z tych metod zaczyna się od get i zwraca liczbę względną. Poniżej znajduje się szczegółowa tabela metod pobierania dla obiektu Date.

Data Czas metoda Zasięg Przykład
Rok pobierzPełnyRok() RRRR 1970
Miesiąc pobierz miesiąc() 0-11 0 = styczeń
Dzień miesiąca pobierzDatę() 1-31 1 = 1 dzień miesiąca
Dzień tygodnia pobierzDzień() 0-6 0 = niedziela
Godzina pobierzGodziny() 0-23 0 = północ
Minuta pobierzMinuty() 0-59
Drugi pobierzSekundy() 0-59
Milisekundy pobierzMilisekundy() 0-999
znak czasu uzyskać czas()

// Zainicjuj nową instancję urodzin
const urodziny = nowa Data(1980, 6, 31);

Teraz możesz użyć wszystkich metod, aby wyodrębnić każdy składnik daty.

urodziny.pobierzPełnyRok(); // 1980
urodziny.getMonth(); // 6
urodziny.pobierzDatę(); // 31
urodziny.getDay(); // cztery
urodziny.getGodziny(); // 0
urodziny.getMinuty(); // 0
urodziny.getSeconds(); // 0
urodziny.getMilisekundy(); // 0
urodziny.getTime(); // 333849600000 (dla GMT)

Czasami może być konieczne wyodrębnienie tylko części daty, a wbudowane metody pobierania pomogą Ci w tym.

Możesz na przykład porównać dzisiejszą datę z 3 października, aby sprawdzić, czy jest to 3 października, czy nie.

// Pobierz dzisiejszą datę
const dzisiaj = new Date();
// Porównaj dzisiaj z 3 października
if (dzisiaj.getDate() === 3 && dzisiaj.getMonth() === 9) (
console.log("Jest 3 października.");
) w przeciwnym razie (
console.log("Nie jest 3 października.");
}
To nie jest 3 października.

Wbudowane metody get umożliwiają dostęp do składników dat.

Zmiana daty za pomocą zestawu

Dla wszystkich wymienionych powyżej metod get istnieje odpowiednia metoda set. Jeśli get służy do pobierania określonego składnika daty, set służy do zmiany tych składników. Poniżej znajduje się szczegółowa tabela metod ustawiających dla obiektu Date.

Data Czas metoda Zasięg Przykład
Rok ustawPełnyRok() RRRR 1970
Miesiąc setMonth() 0-11 0 = styczeń
Dzień miesiąca ustawić datę() 1-31 1 = 1 dzień miesiąca
Dzień tygodnia ustawDzień() 0-6 0 = niedziela
Godzina ustawGodziny() 0-23 0 = północ
Minuta setMinutes() 0-59
Drugi setSeconds() 0-59
Milisekundy ustawMilisekundy() 0-999
znak czasu ustawCzas() Liczba milisekund od czasu zerowego

Te metody zestawów mogą służyć do zmiany jednego lub większej liczby składników daty. Na przykład możesz zmienić rok w zmiennej urodziny na 1997.

// Zmień rok daty urodzin
urodziny.ustawPełnyRok (1997);
urodziny;
Czw 31 Lip 1997 00:00:00 GMT+0000 (UTC)

Teraz, kiedy nazwiesz zmienną urodziny, zobaczysz nie 1980, ale 1997.

Wbudowane metody set umożliwiają zmianę różnych części obiektu Date.

Metody UTC

Opisane powyżej metody pobierania pobierają składniki daty na podstawie Ustawienia lokalne strefa czasowa użytkownika. Aby zwiększyć kontrolę nad datami i godzinami, możesz użyć metod getUTC, które działają tak samo jak metody get, ale obliczają czas w oparciu o standard UTC (Coordinated Universal Time). Poniżej znajduje się tabela metod UTC dla obiektu Date w JavaScript.

Data Czas metoda Zasięg Przykład
Rok pobierzUTCPełnyRok() RRRR 1970
Miesiąc pobierz miesiąc_UTC() 0-11 0 = styczeń
Dzień miesiąca pobierzUTCDate() 1-31 1 = 1 dzień miesiąca
Dzień tygodnia pobierzUTCday() 0-6 0 = niedziela
Godzina pobierzUTCHours() 0-23 0 = północ
Minuta getUTCMinutes() 0-59
Drugi pobierzUTCSecons() 0-59
Milisekundy pobierzUTCMmilisekundy() 0-999

Aby sprawdzić różnicę między lokalnymi zdobądź metody i uzyskaj metody UTC, uruchom następujący kod.

// Przypisz aktualny czas do zmiennej
const now = new Date();
// Wydrukuj strefy czasowe lokalne i UTC
console.log(teraz.getGodziny());
console.log(teraz.getUTCHours());

Ten kod wydrukuje aktualny czas i czas w strefie czasowej UTC. Jeśli obecnie znajdujesz się w strefie czasowej UTC, liczby, które wyświetli program, będą takie same.

UTC zapewnia międzynarodowy standard czasu i dlatego może obsługiwać kod według stref czasowych, jeśli Twój program tego potrzebuje.

Wniosek

W tym samouczku nauczyłeś się, jak utworzyć wystąpienie obiektu Date, jak korzystać z jego wbudowanych metod, aby uzyskać dostęp i modyfikować składniki podanej daty. Więcej dokładna informacja o czasie i dacie w JavaScript można znaleźć w sieci Mozilla Developer Network.

Wiedza o tym, jak pracować z datami, jest ważna w wielu typowych zadaniach w JavaScript, od generowania regularnych raportów po wyświetlanie dat i harmonogramów we właściwej strefie czasowej.

Tagi:

Uzyskanie aktualnej daty w JavaScript jest bardzo proste. Do tego służy obiekt Date. Jego składnia jest dość prosta, a nazwy metod są intuicyjne. W poniższych przykładach pokażę, jak pracować z obiektem Date ( Nowa data JavaScript), aby uzyskać aktualny rok, miesiąc, dzień i godzinę z dokładnością do milisekundy!

Uzyskanie aktualnej daty:

Aby uzyskać aktualną datę w JavaScript, użyj słowo kluczowe new, aby utworzyć nową instancję obiektu Date.

var data = nowa Data(); dziennik konsoli (data);

Ten kod wyświetla na konsoli następujące informacje:

//Wt 02 lutego 2016 15:46:56 GMT-0500 (czas wschodni standardowy)

Wyświetla aktualny dzień tygodnia, bieżący miesiąc, dzień miesiąca, rok, a nawet aktualny czas w formacie 24-godzinnym. Fragment " GMT„ oznacza czas GMT, a „ -0500 ' to różnica w strefach czasowych między czasem lokalnym a GMT .

Cytat z Wikipedii: „Greenwich Mean Time (GMT) GMT) to średni czas słoneczny w Królewskim Obserwatorium Astronomicznym w Greenwich w Londynie”. Wiąże się to z UTC (UTC). « Wschodni czas standardowy Znak ' w wyświetlanej wartości daty odnosi się do strefy czasowej Twojej przeglądarki lub komputera.

* Należy pamiętać, że GMT i UTC różnią się od siebie. Rozważymy wartości UTC w minutach.

* Zauważ również, że data w JavaScript jest zdefiniowana przez czas w milisekundach, który upłynął od północy 1 stycznia 1970 roku UTC. W ciągu jednego dnia jest 86 400 000 milisekund. Zakres obiektu Date wynosi od 100 000 000 dni do 100 000 000 dni względem 1 stycznia 1970 UTC.

* Wartości uzyskane za pomocą powyższej metody zależą od ustawień systemowych Twojego urządzenia. Jeśli zmienisz ustawienia zegara komputera, czas zwrócony tą metodą również ulegnie zmianie.

OK, usunęliśmy nowe formaty dat JavaScript i jesteśmy gotowi, aby przejść dalej!

Pobieranie dnia tygodnia:

Aby uzyskać dzień tygodnia, użyj metody Obiekt JavaScript Data pobierzDzień() :

varday = data.getDay(); dziennik konsoli (dzień);

*Pamiętaj, że dni tygodnia są ponumerowane od 0 do 6, niedziela = 0, poniedziałek = 1, wtorek = 2 i tak dalej.

Pobierz miesiąc:

Aby uzyskać bieżący miesiąc bieżącego roku, użyj metody getMonth(). Wcześniej powiedziałem, że nazwy metod są intuicyjne!

var miesiąc = data.getMonth(); dziennik konsoli (miesiąc); //jeden

* Zwróć uwagę, że podobnie jak dni tygodnia, miesiące są zwracane w formacie liczbowym od 0 do 11; Styczeń = 0, luty = 1, marzec = 2 i tak dalej.

Pobieranie dnia miesiąca:

Aby uzyskać dzień miesiąca, możesz użyć metody GetDate().

var dzieńMiesiąca = date.getDate(); dziennik konsoli (dzień miesiąca); //2

* Metoda GetDate() zwraca dni miesiąca ponumerowane od 1 do 31; numer 1 odpowiada pierwszemu dniu miesiąca.

Uzyskiwanie czasu:

Aby uzyskać aktualny czas, używana jest metoda GetTime().

vartime = data.getTime(); dziennik konsoli (czas); //1454461242058

Wygląda... dziwnie... Co to jest? Zobaczysz liczbę milisekund, które minęły od 1 stycznia 1970 00:00:00 UTC. Więc ile to ma lat?

1454461242058 ms / 3154000000 ms rocznie = około 46 lat
1970 + 46 lat = 2016

Sprawdźmy, czy:

var rok = data.getFullYear(); console.log(rok) //2016

Tak, to jest to! Po prostu wypisujemy bieżącą datę i godzinę za pomocą nowej daty JavaScript.


Do pracy z datami i godzinami w JavaScript służy specjalny obiekt - Date. Ten obiekt jest obsługiwany przez prawie wszystkie wersje JavaScript i może być używany niezależnie od problemów ze zgodnością.

Data i czas w obiekcie Date nie są przechowywane jawnie, ale, jak w większości języków programowania, jako liczba milisekund, które minęły od narodzin systemu Unix, tj. od godziny 0000 w dniu 1 stycznia 1970 r. Charakterystyczną cechą obiektu Date jest to, że wszystkie wartości zakresów mają indeksy liczone od zera. Oznacza to, że styczeń będzie miał indeks o wartości 0 (miesiąc #0), a grudzień będzie miesiącem jedenastym zamiast dwunastego. To samo dotyczy dni tygodnia, godzin, minut itp.

Tworzenie obiektu Date jest bardzo proste:

// bieżąca data-godzina var date = new Date(); // data-godzina z ciągu lub liczby var date = new Date(data); // data-czas z oddzielnych wartości var date = new Date(rok, miesiąc, dzień, godzina, minuta, sekunda, milisekunda);

Obiekt Date ma wiele bardzo przydatnych metod, które pozwalają pracować Poszczególne komponenty data-czas, a także sprawdzić poprawność i poprawność wyprowadzania daty w określonym formacie.

Metody pobierania składników daty i godziny
getFullYear Zwraca rok (na przykład 2011).
getYear Zwraca rok. Cel metody getYear jest jednak taki sam jak cel getFullYear Ta metoda jest przestarzały i nie jest zalecany do użytku, ponieważ wyniki jej pracy nie są jednoznaczne: dla zakresu dat od 1900 do 1999 metoda zwraca numer roku w stuleciu (dwucyfrowy, np. 77), a dla dat spoza tego zakresu pełna wartość to zwrócony (czterocyfrowy, na przykład 2009).
getMonth Zwraca miesiąc.
pobierzDatę Zwraca dzień miesiąca (liczbę w miesiącu).
getHours Zwraca godzinę.
PobierzMinuty Zwraca minutę.
getSeconds Zwraca sekundę.
pobierzMilisekundy Zwraca milisekundę.
getDay Zwraca numer dnia tygodnia.
uzyskać czas Zwraca milisekundowe przesunięcie przechowywane przez obiekt.
Metody zmiany składników daty i godziny
ustaw cały rok Ustawia rok.
ustaw rok Ustawia rok. Cel metody setYear jest podobny do celu metody setFullYear, ale ta metoda jest przestarzała i przestarzała (podobnie jak metoda getYear).
setMonth Ustawia miesiąc.
ustawić datę Ustawia datę w miesiącu (dzień miesiąca).
setGodziny Ustawia godzinę.
setMinutes Ustawia minuty.
setSeconds Ustawia drugi.
ustawMilisekundy Ustawia milisekundę.
setTime Ustawia przesunięcie milisekundowe względem 00:00:00 01/01/1970
Funkcje formatowania i wyjścia daty i czasu
toString Zwraca ciąg reprezentujący datę i godzinę.
toUTCString Zwraca ciąg reprezentujący datę i godzinę przekonwertowaną na czas UTC. Format zwróconego ciągu jest zgodny ze wszystkimi standardami internetowymi.
toGMTString Zwraca ciąg reprezentujący datę i godzinę przekonwertowany na GMT (czas uniwersalny Greenwich). Format zwróconego ciągu jest zgodny ze wszystkimi standardami internetowymi.
toLocaleString Podobny do toString, ale zwraca ciąg reprezentujący datę i godzinę sformatowany zgodnie z ustawieniami regionalnymi użytkownika.
toTimeString Zwraca ciąg reprezentujący czas (ciąg zawiera tylko godzinę).
doDateString Zwraca ciąg reprezentujący datę (ciąg zawiera tylko datę).
toLocaleTimeString Podobny do TimeString, ale zwraca ciąg reprezentujący czas, sformatowany zgodnie z ustawieniami regionalnymi użytkownika.
doLocaleDateString Podobny do toDateString, ale zwraca ciąg reprezentujący datę sformatowany zgodnie z ustawieniami regionalnymi użytkownika.
Dodatkowe funkcje
getTimezoneOffset Zwraca przesunięcie czasu lokalnego na komputerze użytkownika względem UTC. Przesunięcie jest zwracane w ciągu minut.
analizować Funkcja pozwala sprawdzić poprawność daty i godziny zapisanej jako ciąg. Jeśli ciąg jest poprawny, obiekt Date zostanie utworzony natychmiast.

Obiekt Date zawiera również szereg metod do pracy z datami UTC. Funkcje te są całkowicie podobne do tych już rozważanych, ale zawierają w nazwie prefiks „UTC” i działają tylko z czasem „uniwersalnym”: getUTCSeconds, setUTCFullYear itp.

Rozważ przykład pracy z datami:

A oto wynik działania tego skryptu:


Jak widać, reprezentacja daty różni się znacznie w zależności od użytego formatu. Dlatego podczas pracy z datą i godziną musisz przestrzegać kilku prostych zasad:

1. Jeśli to możliwe, użyj formatów UTC lub GMT. Jest to szczególnie ważne przy tworzeniu rozwiązań rozproszonych (np. klientów systemy płatności). Użycie wspólnego czasu odniesienia da Ci gwarancję (choć nie stuprocentową), że zarówno Ty, jak i Twój zdalny partner zinterpretujecie otrzymane dane w ten sam sposób.

2. Sensowne jest używanie zlokalizowanej daty i czasu tylko podczas wyświetlania ich użytkownikowi. We wszystkich innych przypadkach lepiej odrzucić zlokalizowane dane.

3. Jeśli nadal musisz używać lokalnej daty i czasu - nie zapomnij wziąć pod uwagę lokalnego przesunięcia czasu względem czasu odniesienia (UTC lub GMT).

Przestrzeganie tych zasad uchroni Cię przed większością logicznych błędów i niedociągnięć, co oznacza, że ​​Twój kod będzie bardziej stabilny i wysokiej jakości.

Cześć wszystkim!
Często muszę pracować z danymi statystycznymi, a z datami jest wiele związanych. Co więcej, ta sama data może być użyta na stronie w różnych formatach (na przykład przyjazny dla maszyny i przyjazny dla człowieka). Myślę, że większość z was ma całkiem niezłe pojęcie o całym przerażającym kodzie, który wynika z użycia obiektu Date.
Na przykład, aby uzyskać aktualną datę w formacie DD.MM.RRRR, musimy wykonać następujące czynności:
var d = nowa Data(), fd = d.getDate() + "." + (d.getMonth()+1) + "." + d.pobierzPełnyRok();
A kiedy takich linii jest dużo? Czy łatwo zapamiętać, że w javascript miesiąc zaczyna się od zera, gdy rozwijasz nie tylko na nim? Albo fakt, że są tu milisekundy, a nie sekundy, jak prawie wszędzie na backendzie? Niektóre problemy można rozwiązać za pomocą popularnej biblioteki Moment.js, ale działa ona bardzo wolno.
Omawiana biblioteka rozwiązuje te problemy.
Jeśli jesteś zainteresowany, proponuję przeczytać tę krótką recenzję.

TempusJS zawiera dużo cukru składniowego w obiekcie Date, więc jest bardzo szybki. Składnia samej biblioteki jest dość prosta. Na przykład poprzedni przykład można zapisać tak:
var fd = tempus().format("%d.%m.%Y");
Teraz o szybkości. W spojlerze widać porównanie Tempusa z Momentem i natywnym formatowaniem daty (patrz wyżej):

Porównanie natywnego JS, MomentJS i TempusJS

Pobierz aktualną datę
Natywny JS x 2 175 575 operacji/s ±0,75% (96 próbkowanych przebiegów) Moment x 284 864 operacji/s ±0,85% (próbkowanych 96 przebiegów) Tempus x 2086 081 operacji/s ±0,73% (próbkowanych 97 przebiegów)
Formatowanie
Natywny JS x 1 637 517 operacji/s ±0,61% (100 próbkowanych przebiegów) Moment x 8808 operacji/s ±1,07% (100 próbkowanych przebiegów) Tempus x 942 815 operacji/s ±0,68% (próbkowanych 94 przebiegów)
Automatyczne wykrywanie i parsowanie daty
Natywny JS x 11 204 316 operacji/s ±0,81% (88 próbkowanych przebiegów) Moment x 38 511 operacji/s ±1,41% (próbkowanych 95 przebiegów) Tempus x 93 973 operacji/s ±1,06% (próbkowanych 85 przebiegów)
Przetwarzanie daty według formatu
Moment x 46,293 operacje/s ±0,63% (100 próbkowanych przebiegów) Tempus x 109,947 operacji/s ±0,93% (99 próbkowanych przebiegów)
Parsowanie i walidacja
Moment x 44 588 operacji/s ±1,09% (próbkowano 90 przebiegów) Tempus x 103 439 operacji/s ±0,90% (próbkowano 94 przebiegi)
Wyniki pochodzą z mojego laptopa w Google Chrome 30.0.1599.114. W innych przeglądarkach wyniki są różne, ale stosunek pozostaje mniej więcej taki sam.
Do testów wykorzystano bibliotekę benchmark.js
Benchmarki dla innych funkcji, możesz zobaczyć.

Tak więc zalety tej biblioteki można zapisać w następujący sposób:

  • Obsługuje IE6+, Chrome, Firefox, Opera;
  • Obsługuje łańcuchy połączeń;
  • Miesiące mogą zaczynać się od 1 (domyślnie) zamiast od zera;
  • Milisekundy można wyłączyć (domyślnie) lub włączyć;
  • Szybka praca (Ponieważ w wielu przypadkach używany jest natywny obiekt Date dla przeglądarki, którego implementacja jest napisana w szybszych językach);
  • Obsługuje niestandardowe formaty i wtyczki
  • Walidacja daty jest bardzo szybka i zależy tylko od funkcji, które ustawiają datę (ponieważ walidacja odbywa się już przy wprowadzaniu wartości i nie jest wyliczana osobno);
  • Wielojęzyczność i automatyczne wykrywanie języka użytkownika.

Tutaj omówimy tylko niektóre funkcje.

Formatowanie i parsowanie

Na początek kolejny przykład formatowania daty. Tutaj również używamy łańcucha połączeń. Na końcu każdego ustawienia wartości otrzymujemy obiekt TempusDate, którego możemy użyć w dalszej części łańcucha. Przykład:
temp.(). // Dostawać Nowa data calc((miesiąc: -1)). // zmniejsz o jeden miesiąc format("%d.%m.%Y"); // Wyjście jako ciąg
Tak więc otrzymamy ten sam dzień, godzinę i sekundę, ale miesiąc temu. Przydaje się to do otrzymywania raportów za ostatni miesiąc.

Następnym przykładem jest parsowanie dat.
// Zwraca obiekt TempusDate z datą "2013-11-18" tempus("11/18/2013"); // Zwraca obiekt TempusDate z datą "2013-12-12" tempus("2013-12-12", "%Y-%m-%d"));
Tempus może automatycznie wykrywać niektóre znane formaty. Możesz także określić konkretny format, wtedy parsowanie będzie szybsze. Dodatkowo możesz ustawić datę, która zostanie zwrócona, jeśli parsowanie się nie powiedzie:
// Dlatego "123" nie pasuje do formatu "%d.%m.%Y", wtedy // obiekt zawierający datę 2013-01-01 zostanie zwrócony tempus("123", "%d.%m.%Y ", tempus ());
Możesz zobaczyć listę domyślnych formatów

Teraz zmieńmy format już sformatowanej daty
// "05.11.2013" tempus("11.05.2013").format("%Y-%m-%d"); // Lub tak // "Październik, 12" tempus("2013-10-12 12:31:01", "%Y-%m-%d %H:%M:%S").format(" % B, %d");

Możesz także użyć lokalizacji do formatowania. Domyślnie zostanie wybrany język użytkownika (pobrany z przeglądarki) lub język domyślny, jeśli język użytkownika nie zostanie znaleziony wśród dostępnych języków programu Tempus.
// Ustaw język tempus.lang("ru"); // Standardowy format użycia // "Listopad, 05" tempus(1383609600).format("%B, %d");
Na ten moment Są tylko dwa języki - rosyjski i angielski, więc chętnie pomogę.

Walidacja

Weryfikacja dat przebiega w następujący sposób:
// Zwraca false tempus("08/32/2013", "%d.%m.%Y").valid(); // Zwraca true tempus("00:00 01.01.2012", "%H:%M %d.%m.%Y").valid();

W przypadku błędu można zobaczyć pola, w których wystąpił - wszędzie tam, gdzie wartość nie jest fałszywa:
// Zwraca ("rok":-5,"miesiąc":false,"dzień":false,"godziny":false, // "minuty":false,"sekundy":false,"milisekundy":false) tempus (). rok(-5). // ustaw rok=-5, czyli nieprawidłowe błędy(); // pobierz obiekt z błędami

Zakresy dat

Czasami potrzebujemy podać liczbę lat (na przykład wiek), miesiące, dni itp. między dwiema datami. W tym celu możemy użyć metody between, która wyszukuje różnicę między dwiema datami i zwraca w żądany format(„rok”, „miesiąc”, „dzień”, „godziny”, „minuty”, „sekundy”, „milisekundy”).
Oto prosty przykład pokazujący liczbę miesięcy między 1 listopada 2013 a 5 maja 2014:
// Zwraca 6 tempus().between(tempus(), "miesiąc");
Albo ile godzin pozostało do nowego roku
tempus().between(tempus(), "godziny");
W ostatnim przykładzie widać, że określiłem tylko rok. Podczas ustawiania wartości na tablicę lub obiekt, brakujące wartości będą
wypełniony minimalnym. Lista stałych z wartości minimalne, możesz zobaczyć w dokumentacji.

Ponadto możemy zmienić dowolną datę za pomocą funkcji calc:
// Zwróć TempusDate z datą 2012-01-01 tempus().calc((rok: 1, miesiąc: -4, dzień: -1));

Własne formaty

Stosujemy własny format miesiąca, który może przyjmować wartości od 1 do 12 (zamiast 01 do 12):
// Zarejestruj nowy format tempus.registerFormat("%q", // dyrektywa - %q function(data) ( // Podaj tutaj funkcję formatowania, tj. co zostanie zastąpione przez %q data powrotu.miesiąc(); ) , function(value) ( ​​// A oto funkcja parsowania var v = Number(value); return (month: (isNaN(v) ? undefined: v) ); ), 1, // Minimalna długość tej wartości 2 może zająć , // Maksymalna długość "liczba" // Typ); // Testowanie // Zwróci "01.01.2013"; tempus((rok: 2013, miesiąc: 1, dzień: 1)).format("%d.%q.%Y"); // Zwraca ("rok":2013,"miesiąc":2,"dzień":10,"godziny":0,"minuty":0,"sekundy":0); tempus("10.2.2013", "%d.%q.%Y").get();
Podczas rejestracji możesz zauważyć, że niektóre parametry są ustawiane osobno, podczas gdy możesz użyć Wyrażenie regularne. Właściwie pierwotnie tam był, ale po opuszczeniu go prędkość wzrosła kilkadziesiąt razy.
Jeśli chcesz usunąć jakiś format, użyj opcji UnregisterFormat:
tempus.unregisterFormat("%d"); // Zwraca „%d.01.2013”, ponieważ dyrektywa %d już nie istnieje. tempus.format((rok: 2013, miesiąc: 1, dzień: 1), "%d.%m.%Y");

Gettery/Settery

Możesz uzyskać/ustawić niektóre wartości za pomocą year(), month(), day(), hours(), minutes(), seconds(), milliseconds(), dayOfWeek(), utc(), timestamp() lub ustawić funkcje (). Na przykład:
temp.(). // Pobierz bieżącą datę rok(1900). // Pozostaw wszystko bez zmian, ale ustaw rok na 1900 rok przestępny(); // Sprawdź, czy jest to rok przestępny, fałsz w tym przypadku tempus().year(); // I tak otrzymujemy bieżący rok w postaci liczbowej

Generowanie daty

Datę możesz wygenerować na wiele sposobów, pełna lista parametry znajdują się w dokumentacji. Oto minimalny przykład.
// zwraca ["29.03.2013", "30.03.2013", "31.03.2013", "01.04.2013", "02.04.2013"]; tempus.generate(( dateFrom: "20130329", formatFrom: "%Y.%m.%d", dateTo: "20130402", period: (dzień: 1), format: "%d.%m.%Y" ));
Może to być przydatne do wyświetlania wykresów według dat i zmiany formatu wyświetlania bezpośrednio na kliencie, bez żądań do zaplecza. Datę można wygenerować jako tablicę lub jako obiekty, gdzie same daty będą używane jako klucze (przydaje się to, gdy potrzebujemy powiązać wydarzenie z datą, na przykład, gdy tworzymy własny kalendarz). Daty można również grupować według dni, tygodni, miesięcy, godzin, lat - cokolwiek. Można to również zastosować do kalendarza.

Wtyczki

Wreszcie wtyczki. Tutaj rozszerzamy fabrykę, aby wygenerować losową datę. Potrzebujemy również klasy TempusDate, którą można znaleźć w tempus.classes(). Oto przykładowa wtyczka:
(function (tempus) ( var TempusDate = tempus.classes("TempusDate"); tempus.randomDate = function() ( var date = new TempusDate()); date.year(Math.floor((Math.random()*() temp.MAX_ROK - temp.MIN_ROK)) + temp.MIN_ROK)).miesiąc(Matem.podłoga((Matem.losowe()*(tempus.MAX_MIESIĄC - temp.MIN_MIESIĄC)) + temp.MIN_MIESIĄC)).dzień(Matem. floor((Math.random()*(date.dayCount() - tempus.MIN_DAY)) + tempus.MIN_DAY)).hours(Math.floor((Math.random()*(tempus.MAX_HOURS - tempus.MIN_HOURS) ) + temp.MIN_GODZINY)).minuty(Matematyka.podłoga((Matematyka.losowa()*(tempus.MAX_MINUT - temp.MIN_MINUT)) + temp.MIN_MINUT)).sekundy(Matematyka.podłoga((Matematyka.losowa()) *(tempus.MAX_SECONDS - tempus.MIN_SECONDS)) + tempus.MIN_SECONDS)); data powrotu; ); ))(tempus); // Teraz możemy tworzyć daty takie jak ta var someRandomDate = tempus.randomDate();
Myślę, że w ten sposób będzie można wygodnie pisać widgety za pomocą jQuery + Tempus, Angular + Tempus itp.

Źródła

Możesz go zainstalować, pobierając kod źródłowy z github:
https://github.com/crusat/tempus-js/releases
Lub przez altankę:
$ bower zainstaluj tempus
Potrzebujesz tylko jednego pliku - tempus.js lub tempus.min.js.

mam nadzieję, że podana biblioteka będzie przydatna, a także ciekawie byłoby wiedzieć, czego w niej brakuje, aby dalej rozwijać bibliotekę we właściwym kierunku. Dziękuję za uwagę!
PS Dzięki za zaproszenie!