Compteur de mois
De janvier 2020 à juin 2024, il y a 53 mois entiers. Saisissez seulement l'année et le mois de chaque date, sans le jour, et obtenez le nombre de mois d'un bail, d'une ancienneté, d'un abonnement ou d'un projet. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Année de début
- 2 020
- Mois de début
- 1
- Année de fin
- 2 024
- Mois de fin
- 6
- Mois
- 53
- Nombre de mois
- 53
Un compteur de mois répond à une question plus étroite qu'un écart de dates complet : lorsque l'on ne connaît que l'année et le mois de deux dates civiles, combien de mois entiers les séparent ? On cherche ce nombre pour tarifer un bail, compter l'ancienneté, planifier un abonnement ou convertir une fenêtre de projet en périodes de facturation.
Ce que signifie un décompte de mois entiers entre deux dates année-mois
Un mois civil est un créneau nommé dans l'année civile — de janvier à décembre — et non un nombre fixe de jours. Lorsqu'on demande combien de mois séparent deux dates alors que l'on ne connaît que l'année et le mois de chacune, on ne demande ni les jours restants, ni un ajustement d'année bissextile, ni un âge en années-mois-jours. On veut l'écart entier sur la grille année-mois.
Cet écart est la différence de deux index ordinaux de mois : douze fois l'année plus le numéro du mois. Soustrayez l'index de départ de l'index d'arrivée et vous obtenez le décompte signé de mois entiers. De janvier 2020 à janvier 2021, cela fait douze mois ; de janvier 2020 à février 2020, un mois ; la même année et le même mois donnent zéro.
Inversez la paire : le résultat signé change de signe, tandis que le décompte absolu de mois reste identique. C'est la même arithmétique que les paies utilisent pour les périodes de facturation closes, et la même identité qu'une clause de bail lorsqu'elle dit « une durée de vingt-quatre mois à compter de mars 2024 ».
Comme le jour du mois n'est jamais fourni, le résultat ne dépend pas du fait qu'un mois ait vingt-huit ou trente-et-un jours, et il ne recadre pas les dates de fin de mois comme doit le faire un additionneur conscient du jour. C'est une qualité de l'intention de recherche, non un champ jour manquant : le compteur de mois est l'outil que l'on ouvre lorsque le jour est sans objet ou inconnu.
Où un compteur de mois rend service
Les équipes logement et facilities comptent les mois entre un couple année-mois d'entrée et un couple année-mois de sortie lorsque le bail est rédigé en mois civils plutôt qu'en jours exacts. Les outils de ressources humaines déclarent l'ancienneté en mois révolus depuis un couple d'embauche jusqu'à un couple de revue, sans inventer un jour de mois manquant. Les bureaux de facturation d'abonnements et de SaaS transforment une fenêtre de forfait en un décompte de mois avant d'appliquer un tarif mensuel.
Les chefs de projet convertissent un mois de lancement et un mois de livraison en une durée à poser dans un Gantt ou un devis à prix ferme. Une validation refusée ne consomme pas de solde.
Cas d’usage
Durées de bail et de location
Comptez les mois entiers d'un couple année-mois d'entrée à un couple année-mois de sortie lorsque le contrat est rédigé en mois civils, non en jours exacts.
Ancienneté professionnelle en mois
Déclarez les mois révolus depuis un couple d'embauche jusqu'à un couple de revue ou de départ, sans inventer un jour de mois manquant.
Fenêtres d'abonnement et de projet
Transformez le mois de début d'un forfait et le mois de fin en un décompte de périodes de facturation, ou le mois de lancement et celui de livraison en une durée de projet.
Questions fréquentes
Que se passe-t-il si un mois ou une année est invalide ?
Les mois doivent être des entiers de 1 à 12 et les années des entiers de 1 à 9999. Ces échecs ne sont pas facturés.
Le compteur de mois a-t-il besoin du jour du mois ?
Non. L'intention de recherche est uniquement la grille année-mois. Pour des écarts conscients du jour avec des jours restants, utilisez un outil de différence de dates qui accepte des dates civiles complètes.
Que se passe-t-il si la date de fin précède la date de début ?
La même paire en ordre inverse ne change que le signe de months.
Le mois de départ compte-t-il parmi les mois ?
Non, le compteur mesure l'écart entre les deux mois. De janvier 2020 à février 2020, il y a un mois, de janvier 2020 à janvier 2021 douze, et la même année avec le même mois donne zéro.
À quoi sert un compteur de mois ?
À tout ce qui s'exprime en mois du calendrier plutôt qu'en jours : un bail de l'entrée à la sortie, les mois d'ancienneté pour un entretien annuel, un abonnement converti en périodes de facturation ou un projet du lancement à la livraison.
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/life/month-counter \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"start_year":2020,"start_month":1,"end_year":2024,"end_month":6}'const res = await fetch("https://api.kit.forhosting.com/life/month-counter", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"start_year": 2020,
"start_month": 1,
"end_year": 2024,
"end_month": 6
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/month-counter",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"start_year": 2020,
"start_month": 1,
"end_year": 2024,
"end_month": 6
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/month-counter", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"start_year":2020,"start_month":1,"end_year":2024,"end_month":6}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"start_year":2020,"start_month":1,"end_year":2024,"end_month":6}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/month-counter", 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
{
"start_year": 2020,
"start_month": 1,
"end_year": 2024,
"end_month": 6
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.month_counter",
"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
year_min | 1 |
year_max | 9999 |
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
Cette capacité accepte start_year, start_month, end_year et end_month, vérifie que chaque année est un entier de 1 à 9999 et chaque mois un entier de 1 à 12, puis applique l'identité months égale année de fin moins année de début, fois douze, plus mois de fin moins mois de début. L'écart signé est months ; la valeur absolue est month_count. Un mois ou une année invalide échoue avec invalid_input et n'est pas facturé.
Contrat d'entrée, validation et réponse renvoyée
Les années doivent tomber entre 1 et 9999 inclus. Les mois doivent tomber entre 1 et 12 inclus. Les chaînes numériques telles que "2020" ou "06" sont acceptées ; les booléens, objets, chaînes vides et non-entiers ne le sont pas. Le moteur ne lit jamais l'horloge système, de sorte que deux appelants qui envoient les mêmes quatre entiers reçoivent toujours le même objet. Envoyez quatre entiers obligatoires : start_year et start_month pour la borne que vous traitez comme départ, et end_year et end_month pour l'autre borne. Les alias from_year, begin_year, from_month, begin_month, to_year, until_year, to_month et until_month se rattachent aux mêmes quatre champs afin qu'un formulaire ou un script puisse conserver les noms déjà présents dans son schéma. Si l'une des deux dates a un mois ou une année invalide, la tâche échoue avec invalid_input qui nomme le champ — ces échecs ne sont pas facturés. En cas de succès, le corps répète les quatre entiers validés, renvoie months comme écart signé, renvoie month_count comme décompte absolu de mois, et reformule la formule pour qu'un client puisse l'imprimer à côté de la réponse. Exemple : start_year 2020, start_month 1, end_year 2024, end_month 6 donne months 53 et month_count 53, car quatre années font quarante-huit mois et janvier à juin en ajoute cinq.
Où un compteur de mois rend service
Comme l'implémentation est parse pure de palier A, chaque appel réussi coûte le tarif de base publié $0.002, sans jetons de modèle et sans réseau sortant. Conservez les deux couples année-mois dans la requête, figez month_count dans les tests, et vous obtenez un décompte de mois reproductible pour baux, ancienneté et facturation sans déployer une bibliothèque de calendrier.
Questions techniques
Comment le compteur de mois calcule-t-il les mois entiers entre deux dates ?
Il prend start_year, start_month, end_year et end_month et renvoie months = (end_year − start_year) × 12 + (end_month − start_month). month_count est la valeur absolue de cet écart signé.
Combien coûte le compteur de mois ?
L'outil du navigateur est gratuit. Les requêtes API utilisent un solde KIT prépayé à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.