Chrono Mock
LangueFrançais

Quelle date faut-il tester ?

La moitié du test de dates, c'est déplacer l'horloge. L'autre moitié, c'est savoir où la déplacer. Un calculateur en ligne vous dira quelle date tombe dans quatre-vingt-dix jours. Il ne vous dira pas que c'est un jour férié bancaire, ni que c'est le dernier jour du trimestre.

Le calculateur de Chrono Mock. À gauche, une liste de scénarios avec recherche et leurs explications, au centre le constructeur de dates, et la colonne de résultat à droite liste chaque format avec un bouton de copie en face, puis Use this date en dessous. Sous le constructeur, un 04/08/2008 collé est signalé comme ambigu, avec les lectures américaine et polonaise.
Sous le constructeur, le sens inverse : 04/08/2008 collé, et les deux lectures montrées plutôt qu'une seule devinée.

Jours ouvrés, avec les vrais jours fériés

« Dix jours ouvrés plus tard », ce n'est pas de l'arithmétique - cela dépend du calendrier de quel pays vous comptez. Même date de départ, mêmes dix jours, deux réponses différentes :

$ 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

Un jour d'écart, et le calculateur vous dira pourquoi si vous l'interrogez sur la date intermédiaire :

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

Les États-Unis et la Pologne sont livrés comme calendriers de référence, choisis parce qu'à eux deux ils exercent tous les types de règles qui existent : dates fixes, n-ième jour de la semaine d'un mois, dates calculées à partir de Pâques, et la règle américaine selon laquelle un jour férié tombant un samedi est observé le vendredi précédent. Ajouter un pays, c'est un fichier de données, pas une modification de code.

Tous les formats d'un coup

L'application testée veut la date sous la forme qu'elle attend. Plutôt que de vous faire convertir, le calculateur les affiche toutes - et un masque personnalisé pour celles qui n'entrent dans aucun standard.

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

Cette valeur epoch n'est pas un hasard - 2147483647 est exactement le plus grand nombre qu'un entier signé de 32 bits puisse contenir, et c'est toute la raison pour laquelle cette date compte.

Lire une date à l'envers

L'autre sens est tout aussi utile : collez une date tirée d'un journal et découvrez ce qu'elle est. Quand le format est ambigu - et 04/08 l'est dans la moitié du monde -, les deux lectures sont montrées plutôt qu'une seule devinée, parce que c'est de cette devinette que venait le rapport de bug d'origine.

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

Quatre mois d'écart, et des jours de la semaine différents. Une date ISO est sans ambiguïté et est lue comme telle, et ce qui n'est pas une date du tout est refusé plutôt que deviné.

Construit à partir d'étapes, pas d'une phrase

Un moment est un point de départ plus des étapes, et le résultat intermédiaire est montré après chacune, de sorte qu'une expression qui donne une réponse surprenante vous montre où elle a dévié. Cinq sortes d'étapes : décaler d'une unité, fixer l'heure de la journée, se caler sur une limite de période, passer au jour ouvré le plus proche, et réexprimer dans un autre fuseau horaire.

# La dernière seconde avant le passage à la nouvelle année
chrono calc --base today --snap eoy

# Quatre-vingt-dix jours ouvrés plus tard, dans le calendrier bancaire américain
chrono calc --base today --shift +90bd --calendar us-banking

# Dix-huit ans et un jour en arrière, pour une vérification d'âge
chrono calc --base today --shift -18y --shift -1d

Toute date calculée va directement dans une session de substitution, et --json émet le même résultat sous forme lisible par une machine. Les dates qui valent la peine d'être testées →

L'essayer