Écart entre deux intervalles de temps en UTC
Ce calculateur mesure le temps écoulé qui sépare deux intervalles explicites de date et heure ISO.
Lancer gratuitement
Indiquez le début et la fin de chacun avec UTC ou un décalage numérique : toutes les valeurs sont normalisées en UTC avant comparaison. Si les plages se chevauchent ou partagent une limite, le résultat vaut zéro. Vous obtenez aussi les millisecondes, les secondes, une durée ISO 8601 et leur ordre chronologique.
Saisissez des intervalles complets avec un décalage explicite
Fournissez quatre valeurs : le début et la fin du premier intervalle, puis ceux du second. Chaque valeur doit être une date-heure ISO 8601 complète, telle que <code>2026-07-25T09:00:00Z</code> ou <code>2026-07-25T12:00:00+01:00</code>. La zone explicite identifie l’instant sans dépendre des réglages locaux. Chaque début doit précéder sa fin ou lui être égal. Les fractions de seconde comportant jusqu’à trois chiffres sont acceptées ; les dates seules, zones nommées, secondes intercalaires et décalages omis sont refusés. Si votre source emploie des zones nommées, convertissez-les auparavant avec le décalage valable à la date de chaque extrémité.
Comprenez le calcul de l’écart UTC
Chaque extrémité est convertie par arithmétique calendaire en une position UTC exprimée en millisecondes. Si le premier intervalle finit avant le début du second, sa fin est soustraite au second début ; dans l’ordre inverse, l’opération est inversée. Sinon, les plages se touchent ou se chevauchent et l’écart vaut zéro. Ainsi, 12:00 à +01:00 correspond à 11:00Z. La réponse contient les millisecondes, les secondes, une durée ISO 8601 et un libellé d’ordre. Aucun recours n’est fait à l’heure actuelle, aux paramètres régionaux, au réseau ou à l’analyseur de dates de l’environnement.
Exploitez le résultat sans ambiguïté dans un planning
Le résultat positif ou nul permet de mesurer l’inactivité entre réservations, incidents ou périodes d’exploitation. Consultez le libellé d’ordre pour connaître le premier intervalle. <code>overlap_or_touch</code> regroupe volontairement chevauchement et contact, car aucun ne laisse de temps entre les plages. Pour mesurer le chevauchement, les heures ouvrées ou distinguer contact et intersection, choisissez un calcul spécialisé. Le navigateur exécute le même solveur pur que l’API. Une requête API coûte $0.002. Conservez les millisecondes pour les comparaisons précises et utilisez la durée ISO pour l’échange ou l’affichage.
Cas d’usage
Vérifier les marges entre réservations
Mesurez le temps libre exact entre réservations après normalisation de leurs décalages explicites.
Analyser une chronologie d’événements
Calculez le silence entre des incidents consignés avec des décalages UTC différents.
Valider l’espacement d’un planning
Confirmez que deux fenêtres d’activité laissent assez de temps, quel que soit l’ordre de saisie.
Questions fréquentes
Que se passe-t-il si les intervalles se chevauchent ?
L’écart vaut zéro et l’ordre est overlap_or_touch, car aucun temps ne sépare les plages.
Et si un intervalle finit exactement au début de l’autre ?
Ils se touchent ; l’écart renvoyé vaut donc exactement zéro.
Différents décalages horaires sont-ils acceptés ?
Oui. Chaque extrémité est normalisée depuis Z ou son décalage numérique explicite vers UTC avant comparaison.
Puis-je omettre le décalage horaire ?
Non. Il évite que le résultat dépende de la zone du serveur, du navigateur ou de l’appareil.
Quelle est la précision du résultat ?
Les entrées et sorties prennent en charge les millisecondes ; l’écart est aussi fourni en secondes et en durée ISO 8601.
Combien coûte une requête API ?
Le tarif de base publié est de $0.002 par requête ; le même calcul déterministe est disponible sur navigateur.
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/intervals-gap \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T10:30:00Z","second_start":"2026-07-25T12:00:00+01:00","second_end":"2026-07-25T13:00:00+01:00"}'const res = await fetch("https://api.kit.forhosting.com/date/intervals-gap", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T10:30:00Z",
"second_start": "2026-07-25T12:00:00+01:00",
"second_end": "2026-07-25T13:00:00+01:00"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/intervals-gap",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T10:30:00Z",
"second_start": "2026-07-25T12:00:00+01:00",
"second_end": "2026-07-25T13:00:00+01:00"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/intervals-gap", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T10:30:00Z","second_start":"2026-07-25T12:00:00+01:00","second_end":"2026-07-25T13:00:00+01:00"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T10:30:00Z","second_start":"2026-07-25T12:00:00+01:00","second_end":"2026-07-25T13:00:00+01:00"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/intervals-gap", 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
{
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T10:30:00Z",
"second_start": "2026-07-25T12:00:00+01:00",
"second_end": "2026-07-25T13:00:00+01:00"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.intervals_gap",
"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_chars | 35 |
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. |