Calculateur de séries d’habitudes : actuelle et record
Ce calculateur transforme une liste de dates de réalisation en deux indicateurs utiles : la série de jours consécutifs qui se termine à la date la plus récente et la plus longue série de tout l’historique.
Lancer gratuitement
Les dates peuvent être désordonnées et les doublons ne comptent qu’une fois ; vous pouvez donc utiliser directement les exports d’applications, de journaux ou de feuilles de calcul. Le calcul repose sur les jours calendaires, et non sur les heures locales écoulées, afin de rester stable entre fuseaux horaires et changements d’heure.
Préparez un historique de réalisations fiable
Indiquez chaque date calendaire à laquelle l’habitude a été réalisée au format YYYY-MM-DD. La liste n’a pas besoin d’être triée, car le calculateur classe les dates avant de mesurer les séries. Les répétitions ne posent pas non plus de problème : si une application a exporté deux fois la même réalisation, ce jour ne compte qu’une fois. Une réalisation à n’importe quelle heure représente la journée entière ; les heures, horodatages et décalages de fuseau ne sont donc pas acceptés. Ce choix préserve un sens clair de la série et empêche que deux saisies effectuées le même jour soient interprétées comme deux jours de progrès. Incluez l’historique complet si vous souhaitez obtenir un record fiable, et pas seulement le dernier mois ou la partie visible dans un tableau de bord. La liste doit contenir au moins une date et chaque valeur doit désigner une date réelle. Le 30 février, une date incomplète ou un texte dans un autre format sont refusés plutôt que corrigés silencieusement. Cette rigueur permet de repérer un export défectueux avant qu’il ne produise un record trompeur.
Comprenez la série actuelle et le record
La série actuelle correspond aux jours consécutifs qui se terminent à la date de réalisation la plus récente que vous avez fournie. Cette définition ne consulte pas la date du jour : une même entrée donne donc toujours la même réponse et les exports historiques restent reproductibles. Si les derniers enregistrements correspondent à lundi, mardi et mercredi, la série actuelle vaut 3, même lorsque le calcul est effectué plus tard. L’absence du mardi interrompt une séquence entre lundi et mercredi, puisque les dates doivent être adjacentes dans le calendrier. La plus longue série est la plus grande séquence de ce type dans l’ensemble de l’historique ; elle peut donc être plus ancienne et supérieure à la série actuelle. Le résultat fournit aussi le nombre de jours de réalisation uniques et la dernière date utilisée, afin de vérifier facilement la suppression des doublons et la réception du bon historique. Les jours bissextiles et les changements de mois ou d’année sont traités comme des jours calendaires adjacents ordinaires. Vous obtenez ainsi des indicateurs utiles sans dépendre de l’horloge de l’appareil ni de la position de l’utilisateur.
Exploitez le résultat dans vos suivis et bilans
Utilisez la série actuelle pour résumer la dynamique à la fin de l’historique enregistré, et la plus longue série comme repère personnel. Une application de suivi peut calculer les deux après l’importation d’un journal d’événements, tandis qu’un processus fondé sur une feuille de calcul peut envoyer une colonne de dates et conserver les indicateurs avec un bilan mensuel. L’ordre des données n’ayant aucun effet, aucun tri préalable n’est nécessaire côté client. Comme les doublons ne comptent qu’une fois, les nouvelles tentatives et les exports fusionnés ne gonflent pas le résultat. Interprétez néanmoins ces séries avec discernement : elles mesurent la régularité enregistrée, pas l’effort, la qualité ni le bénéfice à long terme. Si votre habitude prévoit des jours de repos ou suit un programme hebdomadaire, une stricte succession quotidienne peut ne pas représenter le comportement que vous souhaitez encourager. Dans ce cas, adaptez les dates à votre propre calendrier avant le calcul. Les requêtes API appliquent le tarif de base affiché de $0.002. La version dans le navigateur utilise la même logique pure, sans réseau, hasard ni date courante.
Cas d’usage
Ajoutez des séries à une application d’habitudes
Calculez la dynamique actuelle et le record historique après chaque importation ou mise à jour des dates de réalisation.
Analysez l’export d’un journal
Transformez une colonne d’entrées datées en indicateurs clairs de régularité sans tri manuel.
Fusionnez plusieurs historiques
Réunissez les dates de différentes sources sans laisser les réalisations dupliquées augmenter les séries.
Questions fréquentes
Que signifie la série actuelle ?
Il s’agit de la suite de jours consécutifs qui se termine à la date la plus récente de l’historique fourni. Elle n’est pas comparée à aujourd’hui.
Les dates en double augmentent-elles la série ?
Non. Chaque date calendaire ne compte qu’une fois, même si elle apparaît plusieurs fois dans les données.
Les dates doivent-elles être triées ?
Non. Elles sont validées, dédupliquées et triées avant le calcul des séries.
Que se passe-t-il si la liste est vide ?
La requête renvoie une erreur de saisie, car aucune série ne peut être calculée sans au moins une date de réalisation.
Les années bissextiles et changements de mois sont-ils gérés ?
Oui. Les dates valides et adjacentes restent consécutives lors d’un changement de mois, d’année ou du passage par un jour bissextile.
Quel est le prix d’une requête API ?
Chaque requête API applique le tarif de base de $0.002.
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/final3/habit-streak-calculate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"dates":["2026-07-20","2026-07-21","2026-07-23","2026-07-24","2026-07-25"]}'const res = await fetch("https://api.kit.forhosting.com/final3/habit-streak-calculate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"dates": [
"2026-07-20",
"2026-07-21",
"2026-07-23",
"2026-07-24",
"2026-07-25"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/final3/habit-streak-calculate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"dates": [
"2026-07-20",
"2026-07-21",
"2026-07-23",
"2026-07-24",
"2026-07-25"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/final3/habit-streak-calculate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"dates":["2026-07-20","2026-07-21","2026-07-23","2026-07-24","2026-07-25"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"dates":["2026-07-20","2026-07-21","2026-07-23","2026-07-24","2026-07-25"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/final3/habit-streak-calculate", 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
{
"dates": [
"2026-07-20",
"2026-07-21",
"2026-07-23",
"2026-07-24",
"2026-07-25"
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "final3.habit_streak_calculate",
"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.
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. |