Convertissez un cron en liste des prochaines exécutions
*/20 9-10 * * 1-5, à partir de 09:05 UTC le 27 juillet 2026, s'exécute à 09:20, 09:40, 10:00 et 10:20. Collez une expression cron, un point de départ et le nombre d'exécutions voulu pour voir les heures exactes. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Cron
- */20 9-10 * * 1-5
- Quantité
- 4
- Heure de début
- 2026-07-27T09:05:00Z
- Heures d'exécution
- 2026-07-27T09:20:00Z, 2026-07-27T09:40:00Z, 2026-07-27T10:00:00Z, 2026-07-27T10:20:00Z
Une expression cron est concise, mais sa syntaxe n’est pas toujours facile à vérifier. Cette capacité transforme une expression cron standard à cinq champs en une liste concrète des prochains horodatages UTC, strictement postérieurs à l’heure de départ que vous fournissez. Choisissez le nombre d’occurrences souhaité et recevez des valeurs ISO 8601 exactes à copier dans des tests, procédures, tickets ou revues de déploiement. Tout champ mal formé provoque une erreur d’entrée explicite au lieu de produire un calendrier vraisemblable mais faux.
Transformez une syntaxe cron compacte en dates vérifiables
Une expression cron à cinq champs décrit les minutes, les heures, les jours du mois, les mois et les jours de la semaine. Cette notation convient aux machines, mais une personne chargée de la vérification doit souvent voir des dates réelles avant de valider le calendrier. Indiquez l’expression, une heure de départ ISO 8601 UTC exclusive et un nombre compris entre 1 et 100.
Le résultat reprend la requête normalisée et fournit les prochains instants correspondants sous forme d’une liste lisible d’horodatages terminés par Z. Le départ est exclusif : s’il vaut exactement 09:00 et que l’expression s’exécute à 09:00, le premier résultat sera l’occurrence suivante. Cron ayant une résolution d’une minute, chaque valeur renvoyée contient zéro seconde.
Les listes, plages inclusives, caractères génériques et pas positifs sont admis dans tous les champs. Ainsi, */15 sélectionne quatre minutes par heure et 9-17/2 une heure sur deux dans cette plage. Le dimanche vaut 0 ou 7.
Comprenez les règles calendaires appliquées au résultat
Tous les calculs utilisent le calendrier grégorien proleptique et UTC. L’obligation d’un horodatage terminé par Z empêche une conversion implicite de fuseau de déplacer une exécution vers une autre date ou une transition d’heure saisonnière. La longueur des mois et les années bissextiles sont calculées directement, y compris la règle des siècles : une année divisible par 100 n’est bissextile que si elle est également divisible par 400.
La correspondance des jours suit la convention cron. Si le jour du mois ou celui de la semaine est générique, le champ restreint décide. Si les deux sont restreints, une date convient lorsque l’un des deux correspond.
Ainsi, 0 9 1 * 1 signifie 09:00 le premier de chaque mois ainsi que chaque lundi, et non uniquement les lundis tombant le premier. Les occurrences sont triées chronologiquement et produites par une arithmétique entière déterministe. La même entrée donne donc la même sortie, quels que soient la machine, le fuseau local, l’horloge et les paramètres régionaux.
Validez vos calendriers avant la mise en production
Employez cette liste comme test d’acceptation concret de vos automatisations. L’analyseur refuse toute expression qui ne comporte pas exactement cinq champs. Il refuse aussi les éléments de liste vides, les plages inversées, les pas nuls ou incorrects et les nombres hors limites.
Les plages admises sont 0–59 pour les minutes, 0–23 pour les heures, 1–31 pour les jours du mois, 1–12 pour les mois et 0–7 pour les jours de la semaine. Les noms de mois ou de jours, les champs de secondes ou d’années, les macros comme @daily et les extensions propres à un moteur sont volontairement exclus, car leur interprétation varie.
Cas d’usage
Vérifier un calendrier de déploiement
Développez une chaîne cron en dates UTC exactes avant d’approuver une tâche de production planifiée.
Préparer une procédure d’exploitation
Listez les prochaines maintenances ou éditions dans un format directement réutilisable dans la documentation.
Questions fréquentes
Quel format cron est accepté ?
Le cron numérique standard à cinq champs : minute, heure, jour du mois, mois et jour de la semaine, avec génériques, listes, plages et pas positifs.
L’heure de départ est-elle incluse ?
Non. Le départ est exclusif : une exécution exactement égale est ignorée au profit de l’occurrence suivante.
Quel fuseau horaire est utilisé ?
Uniquement UTC. Fournissez un horodatage ISO 8601 terminé par Z ; toutes les valeurs renvoyées se terminent aussi par Z.
Comment les deux champs de jour sont-ils combinés ?
S’ils sont restreints, l’un ou l’autre peut sélectionner la date. Si l’un est générique, l’autre décide.
Que signifie */15 dans une planification cron ?
Cela signifie toutes les 15 minutes, soit quatre exécutions par heure. Les pas fonctionnent aussi sur des plages : 9-17/2 à la position de l'heure retient une heure sur deux entre neuf heures et dix-sept heures.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/data/cron-to-readable \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"cron":"*/20 9-10 * * 1-5","count":4,"start_time":"2026-07-27T09:05:00Z"}'const res = await fetch("https://api.kit.forhosting.com/data/cron-to-readable", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"cron": "*/20 9-10 * * 1-5",
"count": 4,
"start_time": "2026-07-27T09:05:00Z"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/cron-to-readable",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"cron": "*/20 9-10 * * 1-5",
"count": 4,
"start_time": "2026-07-27T09:05:00Z"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/cron-to-readable", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"cron":"*/20 9-10 * * 1-5","count":4,"start_time":"2026-07-27T09:05:00Z"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"cron":"*/20 9-10 * * 1-5","count":4,"start_time":"2026-07-27T09:05:00Z"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/cron-to-readable", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"cron": "*/20 9-10 * * 1-5",
"count": 4,
"start_time": "2026-07-27T09:05:00Z"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.cron_to_readable",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_count | 100 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Validez vos calendriers avant la mise en production
L’automatisation par API coûte $0.002 par requête et l’algorithme n’utilise aucun réseau ni service externe.
Cas d'intégration
Créer des fixtures de planificateur
Produisez des horodatages attendus stables pour vos tests sans dépendre de l’horloge actuelle.
Questions techniques
Que devient un champ cron mal formé ?
La requête échoue avec une erreur invalid_input qui désigne le champ incorrect ou la plage non valide.
Combien coûte une requête API ?
Chaque requête API coûte $0.002. Le calcul déterministe n’utilise ni réseau, ni stockage, ni modèle externe.