Calcolo della durata sovrapposta tra due intervalli
Questo calcolatore misura con precisione quanto tempo condividono due intervalli espliciti di data e ora.
Esegui gratis nel browser
Inserisca l’inizio e la fine di ciascun intervallo in formato ISO 8601, includendo Z oppure un offset UTC numerico. Il calcolo porta ogni estremo sulla stessa linea temporale UTC, sceglie l’inizio più tardo e la fine più anticipata e restituisce la durata comune in millisecondi, secondi, minuti e ore. Intervalli separati o che si toccano soltanto restituiscono zero, rendendo il risultato pratico per pianificazione, fatturazione, monitoraggio e reportistica.
Definisca entrambi gli intervalli senza ambiguità
Inserisca quattro valori: inizio e fine del primo intervallo, quindi inizio e fine del secondo. Ogni valore deve essere una data e ora ISO 8601 completa, con data di calendario, orario comprensivo di secondi e Z oppure un offset esplicito come +02:00 o -05:30. Rendere obbligatorio l’offset impedisce che un orario locale venga interpretato diversamente su un altro computer. Ogni inizio deve precedere la relativa fine. Il calcolatore considera gli intervalli semiaperti: l’inizio appartiene all’intervallo, mentre la fine è un limite escluso. Questa convenzione evita di conteggiare due volte lo stesso istante quando prenotazioni, turni o finestre consecutivi si incontrano. Sono accettate da una a tre cifre decimali per i secondi, normalizzate in millisecondi. Date e componenti orarie vengono convalidati direttamente, quindi valori impossibili producono un errore di input. Utilizzi sempre gli stessi quattro campi, indipendentemente dal fatto che si aspetti o meno una sovrapposizione.
Comprenda il calcolo deterministico in UTC
Prima del confronto, il calcolo colloca i quattro estremi su un’unica linea temporale UTC. Un valore che termina con Z è già espresso in UTC. Da un valore con offset positivo viene sottratto l’offset, mentre a uno con offset negativo esso viene aggiunto. Due date scritte diversamente possono quindi indicare lo stesso istante. La sovrapposizione comincia dal più tardo dei due inizi e termina alla più anticipata delle due fini. Se tale fine è successiva all’inizio calcolato, la differenza costituisce la durata comune; altrimenti il risultato è esattamente zero. L’implementazione usa aritmetica del calendario gregoriano e millisecondi interi, senza consultare orologio, impostazioni locali, archivio dei fusi, rete, casualità o Date di JavaScript. Input identici producono sempre risultati identici. L’output esprime la stessa durata in millisecondi, secondi, minuti e ore, così Lei può scegliere l’unità più adatta al proprio sistema.
Applichi il risultato in modo sicuro
Utilizzi la durata di sovrapposizione quando deve confrontare due finestre note: un turno con un’assenza autorizzata, il funzionamento di un’apparecchiatura con una fascia tariffaria, un incidente con l’orario di assistenza o una prenotazione con una disponibilità. Un valore positivo indica quanto tempo è condiviso, non soltanto l’esistenza dell’intersezione. Zero significa che gli intervalli sono separati oppure che uno finisce nell’istante esatto in cui comincia l’altro; in entrambi i casi non condividono tempo trascorso secondo la convenzione semiaperta. Per importi o quote, usi overlap_milliseconds o overlap_seconds come valore sorgente e applichi solo dopo la propria regola di arrotondamento documentata. Non arrotondi preventivamente gli estremi salvo necessità aziendale. L’endpoint accetta soltanto offset espliciti, non nomi come America/New_York, e non deduce regole stagionali. Converta prima gli orari locali. Ogni richiesta API costa $0.002; il browser offre anche verifiche interattive locali.
Casi d'uso
Misurare la copertura dei turni
Calcoli quanta parte di un turno ricade in una finestra operativa presidiata, retribuita o approvata.
Attribuire il tempo di un incidente
Misuri la parte di un disservizio avvenuta durante un periodo contrattuale di assistenza o servizio.
Verificare conflitti tra prenotazioni
Quantifichi il tempo condiviso da due prenotazioni invece di ricevere soltanto una risposta positiva o negativa.
Domande frequenti
Che cosa accade se gli intervalli non si sovrappongono?
Tutti e quattro i campi della durata restituiscono zero. Accade anche quando uno termina esattamente all’inizio dell’altro.
Sono supportati offset UTC differenti?
Sì. Ogni estremo può usare Z o il proprio offset numerico e tutti vengono confrontati sulla stessa linea temporale UTC.
Gli estremi dell’intervallo sono inclusi?
Il calcolo usa intervalli semiaperti: l’inizio è incluso e la fine esclusa. Gli intervalli adiacenti hanno quindi durata comune zero.
Il calcolo usa il fuso orario del server?
No. Usa aritmetica gregoriana e degli offset senza Date, archivio dei fusi, orologio del computer o impostazioni locali.
Quanto costa una richiesta API?
Il prezzo è $0.002 per richiesta. L’esecuzione interattiva nel browser non comporta alcun addebito API.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/date/overlap-duration \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T12:30:00Z","second_start":"2026-07-25T11:15:00+00:00","second_end":"2026-07-25T14:00:00+00:00"}'const res = await fetch("https://api.kit.forhosting.com/date/overlap-duration", {
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-25T12:30:00Z",
"second_start": "2026-07-25T11:15:00+00:00",
"second_end": "2026-07-25T14:00:00+00:00"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/overlap-duration",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T12:30:00Z",
"second_start": "2026-07-25T11:15:00+00:00",
"second_end": "2026-07-25T14:00:00+00:00"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/overlap-duration", 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-25T12:30:00Z","second_start":"2026-07-25T11:15:00+00:00","second_end":"2026-07-25T14:00:00+00:00"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T12:30:00Z","second_start":"2026-07-25T11:15:00+00:00","second_end":"2026-07-25T14:00:00+00:00"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/overlap-duration", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T12:30:00Z",
"second_start": "2026-07-25T11:15:00+00:00",
"second_end": "2026-07-25T14:00:00+00:00"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.overlap_duration",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |