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.
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 →