# Exécuter du code selon un calendrier avec CRON

> Enregistrez une fonction avec CRON() et une ligne cron à cinq champs, et sachez quand la vérification s'exécute et comment supprimer une tâche.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: fr
Content-SHA256: 322fba11540d21cd8dbbd51b9b2bd2510fe81ee8128ef5906a5b4f6b6f2b5aba
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`CRON(line, fn)` exécute `fn(date)` chaque fois que l'heure actuelle correspond à `line`. La ligne comporte cinq champs, comme dans le cron d'Unix : `minute hour day-of-month month day-of-week`. Chaque champ accepte `*` (n'importe quelle valeur), `1,5,9` (une liste), `1-5` (une plage) ou un nombre exact. Les noms de jour comme `mon` ou `fri` fonctionnent dans le dernier champ.

**Écrivez les valeurs sous forme de liste**, `0,15,30,45` : elle correspond exactement aux heures que vous nommez.

Total.js vérifie les tâches enregistrées une fois par minute, donc la résolution la plus fine est la minute. `CRON()` renvoie un objet : `job.remove()` désinscrit la tâche et `job.check(date)` indique si une date correspond à la ligne, ce qui est aussi le moyen le plus simple de tester un calendrier sans attendre.

```js controllers/cron.js
exports.install = function() {
	ROUTE('GET /cron/matches/', matches);
	ROUTE('GET /cron/runs/', runs);
};

var counter = { runs: 0 };

// Every 15 minutes, from Monday to Friday, between 09:00 and 17:59
var job = CRON('0,15,30,45 9-17 * * 1-5', function(date) {
	counter.runs++;
});

function matches($) {

	var dates = {
		monday_0930: new Date(2026, 0, 5, 9, 30),
		monday_0931: new Date(2026, 0, 5, 9, 31),
		monday_1830: new Date(2026, 0, 5, 18, 30),
		sunday_0930: new Date(2026, 0, 4, 9, 30)
	};

	var output = {};
	for (var key in dates)
		output[key] = job.check(dates[key]);

	$.json(output);
}

function runs($) {
	$.json(counter);
}
```
