Chrono Mock

Którą datę testować?

Połowa testowania dat to przesunięcie zegara. Druga połowa to wiedza, dokąd go przesunąć. Kalkulator online powie ci, co wypada dziewięćdziesiąt dni od dziś. Nie powie, że ta odpowiedź to dzień wolny od pracy w banku ani że to ostatni dzień kwartału.

Kalkulator Chrono Mock. Po lewej scenariusze z opisami, na środku builder kroków, a po prawej kolumna wyniku ze wszystkimi formatami i przyciskiem kopiowania. Na dole wklejona data 04/08/2008 jest oznaczona jako niejednoznaczna, z pokazanymi obiema interpretacjami - amerykańską i polską.
Dolny pas to kierunek odwrotny: wklejone 04/08/2008 i obie interpretacje pokazane, zamiast zgadnięcia jednej.

Dni robocze, z prawdziwymi świętami

„Dziesięć dni roboczych" to nie arytmetyka - zależy od tego, w czyim kalendarzu liczysz. Ta sama data początkowa, ta sama liczba dni, dwie różne odpowiedzi:

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar us-banking
  result:  2027-09-16T00:00:00

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar pl
  result:  2027-09-15T00:00:00

Jeden dzień różnicy - a kalkulator powie dlaczego, jeśli zapytasz go o datę leżącą pomiędzy:

$ chrono calc --base 2027-09-06T00:00:00 --calendar us-banking
  metadata:
    weekday       Monday
    business day  no  (us-banking)
    holiday       Labor Day
  what this date tests:
    public holiday

Stany Zjednoczone i Polska są dostarczane jako kalendarze referencyjne, wybrane dlatego, że wspólnie ćwiczą każdy istniejący typ reguły: daty stałe, n-ty dzień tygodnia w miesiącu, daty liczone od Wielkanocy oraz amerykańską regułę, w której święto wypadające w sobotę obchodzi się w poprzedzający piątek. Dodanie kraju to plik z danymi, nie zmiana kodu.

Wszystkie formaty naraz

Testowana aplikacja chce daty w takiej postaci, jakiej akurat oczekuje. Zamiast kazać ci konwertować, kalkulator wypisuje wszystkie - plus własną maskę na te, które nie pasują do niczego standardowego.

$ chrono calc --preset year-2038 --zone +00:00
Chrono Mock - date calculator
  preset:   year-2038 - 2038 boundary
  explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)?
  result:  2038-01-19T03:14:07
  formats:
    ISO date      2038-01-19
    ISO datetime  2038-01-19T03:14:07+00:00
    US            01/19/2038
    PL            19.01.2038
    epoch (s)     2147483647
    epoch (ms)    2147483647000
    FILETIME      137919572470000000
    RFC 1123      Tue, 19 Jan 2038 03:14:07 GMT
  ...
  what this date tests:
    at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)

Ta wartość epoki to nie przypadek - 2147483647 to dokładnie największa liczba mieszcząca się w 32-bitowej liczbie ze znakiem, czyli cały powód, dla którego ta data ma znaczenie.

Czytanie daty wstecz

Drugi kierunek jest równie użyteczny: wklej datę z loga i dowiedz się, co to jest. Gdy format jest niejednoznaczny - a 04/08 jest niejednoznaczny w połowie świata - pokazywane są obie interpretacje, zamiast zgadywania jednej, bo od zgadywania zaczęło się pierwotne zgłoszenie błędu.

$ chrono calc --analyze 04/08/2027
Chrono Mock - date analysis
  input:   04/08/2027  (ambiguous - month/day order differs by locale)
  US MM/DD/YYYY:  2027-04-08  (Thursday)
  PL DD/MM/YYYY:  2027-08-04  (Wednesday)

Cztery miesiące różnicy i inne dni tygodnia. Data w ISO jest jednoznaczna i tak jest czytana, a coś, co w ogóle nie jest datą, zostaje odrzucone, a nie zgadnięte.

Budowane z kroków, nie ze zdania

Moment to punkt wyjścia plus kroki, a wynik pośredni jest pokazywany po każdym z nich, więc wyrażenie dające zaskakującą odpowiedź pokazuje, w którym miejscu skręciło. Pięć rodzajów kroku: przesunięcie o jednostkę, ustawienie godziny, przyciągnięcie do granicy okresu, przejście do najbliższego dnia roboczego i wyrażenie w innej strefie czasowej.

# Ostatnia sekunda przed przełomem roku
chrono calc --base today --snap eoy

# Dziewięćdziesiąt dni roboczych w amerykańskim kalendarzu bankowym
chrono calc --base today --shift +90bd --calendar us-banking

# Osiemnaście lat i jeden dzień wstecz, do sprawdzenia wieku
chrono calc --base today --shift -18y --shift -1d

Każda policzona data trafia wprost do sesji podmiany, a --json wypisuje ten sam wynik w formie maszynowej. Daty warte testowania →

Wypróbuj