Différence entre deux dates en années, mois et jours
Ce calculateur décompose l’intervalle entre deux dates ISO explicites en années entières, mois entiers et jours restants.
Lancer gratuitement
Il indique aussi le sens et le nombre total de jours signé. Comme vous fournissez les deux dates, le résultat ne dépend jamais de l’heure actuelle. La validation stricte AAAA-MM-JJ, le calendrier grégorien proleptique et une arithmétique sans fuseau horaire rendent chaque demande reproductible dans le navigateur, l’API ou un test automatisé.
Calcul de la décomposition en années, mois et jours
Le calculateur considère l’intervalle comme une durée calendaire, non comme une conversion décimale des jours écoulés. À partir de la date antérieure, il cherche le plus grand nombre de mois complets ajoutables sans dépasser la date postérieure. Ce total est séparé en années et mois, puis les jours exacts depuis l’anniversaire intermédiaire sont comptés. Trente jours ne constituent donc pas systématiquement un mois : l’anniversaire mensuel suivant doit être atteint. Cette méthode respecte le sens courant des années et des mois malgré leurs longueurs variables. total_days fournit séparément la différence ordinale signée. Utilisez ce champ pour une valeur unique, et la décomposition pour une durée lisible. Si les dates sont inversées, les composants restent positifs, tandis que direction et total_days conservent l’ordre saisi.
Fins de mois, années bissextiles, ordre inverse et UTC
Tous les jours n’existent pas dans tous les mois ; des règles explicites sont donc nécessaires. Lorsqu’une étape mensuelle arrive dans un mois plus court, le jour est ramené au dernier jour valide : le 31 janvier mène au 28 ou au 29 février. L’algorithme vérifie ensuite qu’aucun dépassement n’a eu lieu. Les années bissextiles suivent la règle grégorienne : divisibilité par 4, sauf les siècles non divisibles par 400. Si la seconde date précède la première, la décomposition garde sa valeur, direction indique un recul et total_days devient négatif. Deux dates égales donnent des zéros. Le calcul n’utilise ni Date de JavaScript, ni fuseau local, heure d’été, réseau, horloge ou analyse dépendante de la langue.
Saisie des dates et bonne utilisation du résultat
Saisissez from et to sous forme de chaînes AAAA-MM-JJ avec les zéros initiaux. Les années 0001 à 9999 sont acceptées. Les dates impossibles, champs manquants, horodatages, formats régionaux et expressions naturelles sont refusés plutôt que devinés. years, months et days forment ensemble une durée séquentielle depuis la date chronologiquement antérieure ; ne convertissez pas un mois en nombre fixe de jours. total_days convient au tri, aux échéances et au stockage scalaire, tandis que direction indique avance, recul ou égalité. Vous pouvez mesurer une ancienneté, documenter un projet, comparer des dates historiques ou appliquer une règle contractuelle reproductible. Une requête API coûte $0.002. Pour calculer un âge à une date précise, fournissez et conservez cette référence : l’outil ne lui substitue jamais aujourd’hui.
Cas d’usage
Décrire la durée d’un projet
Transformez deux jalons enregistrés en durée lisible tout en conservant le nombre exact et signé de jours.
Calculer une ancienneté à date fixe
Mesurez une adhésion, un emploi ou un compte par rapport à une référence enregistrée, et non au jour courant.
Créer des tests de dates reproductibles
Vérifiez les fins de mois et années bissextiles sans variation liée au fuseau horaire ou au moment d’exécution.
Questions fréquentes
Ce calculateur utilise-t-il la date du jour ?
Non. Les deux dates ISO sont obligatoires et le calcul ne consulte jamais l’horloge actuelle.
Les dates inversées sont-elles acceptées ?
Oui. La décomposition reste positive, direction indique un recul et total_days devient négatif.
Comment les fins de mois sont-elles traitées ?
Une étape mensuelle est ramenée au dernier jour valide d’un mois plus court, puis tout dépassement est contrôlé.
Quel format de date est accepté ?
Utilisez strictement AAAA-MM-JJ, avec des dates grégoriennes valides et des années de 0001 à 9999.
Le fuseau horaire ou l’heure d’été modifient-ils le résultat ?
Non. L’outil emploie une arithmétique entière des dates, sans Date JavaScript, fuseau local ni règle d’heure d’été.
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/date/diff-breakdown-ymd \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"2019-01-31","to":"2024-03-02"}'const res = await fetch("https://api.kit.forhosting.com/date/diff-breakdown-ymd", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"from": "2019-01-31",
"to": "2024-03-02"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/diff-breakdown-ymd",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"from": "2019-01-31",
"to": "2024-03-02"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/diff-breakdown-ymd", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"from":"2019-01-31","to":"2024-03-02"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"from":"2019-01-31","to":"2024-03-02"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/diff-breakdown-ymd", 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
{
"from": "2019-01-31",
"to": "2024-03-02"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.diff_breakdown_ymd",
"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. |