Chrono Mock
TaalNederlands

Welke datum moet je testen?

De helft van datumtesten is de klok verplaatsen. De andere helft is weten waarheen. Een online calculator vertelt je welke dag het over negentig dagen is. Hij vertelt je niet dat die dag een bankfeestdag is, of de laatste dag van het kwartaal.

De calculator van Chrono Mock. Links loopt een doorzoekbare scenariolijst met uitleg, in het midden staat de datumbouwer, en de resultaatkolom rechts toont elk formaat met een kopieerknop erbij en Use this date eronder. Onder de bouwer wordt een geplakte 04/08/2008 als dubbelzinnig gemeld, met de Amerikaanse en de Poolse lezing.
Onder de bouwer zit de omgekeerde richting: 04/08/2008 geplakt, en beide lezingen getoond in plaats van er een te raden.

Werkdagen, met echte feestdagen

“Tien werkdagen verder” is geen rekenwerk - het hangt ervan af welke kalender van welk land je telt. Dezelfde startdatum, dezelfde tien dagen, twee verschillende antwoorden:

$ 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

Een dag verschil, en de calculator vertelt je waarom als je hem naar de datum ertussen vraagt:

$ 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 lands on:
    public holiday
    (weekend and holiday marks follow the us-banking calendar)

De Verenigde Staten en Polen worden meegeleverd als referentiekalenders, gekozen omdat ze samen elk bestaand regeltype oefenen: vaste datums, de n-de weekdag van een maand, datums berekend vanaf Pasen, en de Amerikaanse regel waarbij een feestdag die op zaterdag valt op de voorgaande vrijdag wordt geviereerd. Een land toevoegen is een gegevensbestand, geen codewijziging.

Alle formaten tegelijk

De geteste applicatie wil de datum in de vorm die ze verwacht. In plaats van jou te laten omrekenen, drukt de calculator ze allemaal af - en een eigen masker voor die welke in geen enkele standaard passen.

$ 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 lands on:
    at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)

Die epochwaarde is geen toeval - 2147483647 is precies het grootste getal dat een 32-bits geheel getal met teken kan bevatten, en dat is de hele reden waarom de datum ertoe doet.

Een datum achterstevoren lezen

De andere richting is even nuttig: plak een datum uit een logboek en ontdek wat het is. Als het formaat dubbelzinnig is - en 04/08 is dat in de halve wereld - worden beide lezingen getoond in plaats van er een te raden, want uit raden kwam het oorspronkelijke bugrapport.

$ 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)

Vier maanden uit elkaar, op verschillende weekdagen. Een ISO-datum is ondubbelzinnig en wordt als zodanig gelezen, en iets wat helemaal geen datum is, wordt geweigerd in plaats van geraden.

Opgebouwd uit stappen, niet uit een zin

Een moment is een beginpunt plus stappen, en het tussenresultaat wordt na elke stap getoond, zodat een expressie die een verrassend antwoord geeft laat zien waar ze afsloeg. Vijf soorten stappen: verschuiven met een eenheid, het tijdstip van de dag instellen, aansluiten op een periodegrens, naar de dichtstbijzijnde werkdag gaan en opnieuw uitdrukken in een andere tijdzone.

# De laatste seconde voordat een jaar omslaat
chrono calc --base today --snap eoy

# Negentig werkdagen verder, in de Amerikaanse bankkalender
chrono calc --base today --shift +90bd --calendar us-banking

# Achttien jaar en een dag terug, voor een leeftijdscontrole
chrono calc --base today --shift -18y --shift -1d

Elke berekende datum gaat rechtstreeks in een vervangingssessie, en --json geeft hetzelfde resultaat in machinevorm. De datums die het testen waard zijn →

Probeer het