Durata totale di intervalli di tempo
Incolli un elenco di intervalli di tempo e ottenga il tempo realmente coperto: 10:00-12:00 e 11:00-13:00 UTC coprono 3 ore, non le 5 di una somma semplice. Gli intervalli sovrapposti o contigui vengono prima uniti. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
I team operativi, gli script di paghe e gli strumenti di SLA spesso gestiscono molti intervalli di tempo espliciti che si sovrappongono: turni di reperibilità, prenotazioni di attrezzature, finestre di indisponibilità o sessioni fatturabili. Sommare ogni intervallo in modo ingenuo conta due volte i minuti condivisi. Questo calcolatore di durata totale di intervalli di tempo accetta un elenco di coppie inizio e fine in ISO-8601, normalizza ogni estremo in UTC assoluto con aritmetica gregoriana pura, unisce gli intervalli che si sovrappongono o si toccano e restituisce la lunghezza del tratto coperto in millisecondi, secondi e ore, più una scomposizione in giorni, ore, minuti e secondi. Le prenotazioni adiacenti che si incontrano a un estremo diventano un segmento continuo, così un punto di contatto a lunghezza zero non gonfia mai il totale.
Cosa significa la durata coperta dopo la fusione delle sovrapposizioni
La durata coperta misura l’unione dei Suoi intervalli sulla linea temporale assoluta, non la somma di ogni lunghezza grezza. Se Alice prenota dalle dieci alle dodici e Bob dalle undici alle tredici lo stesso giorno UTC, la somma ingenua è di cinque ore, mentre il tratto coperto è solo di tre ore dalle dieci alle tredici. Gli intervalli che si toccano, ad esempio terminare alle dodici e iniziare alle dodici, si fondono in un blocco continuo, il modello corretto di tempo continuo per copertura, occupazione e disponibilità SLA.
Gli intervalli a lunghezza zero e invertiti vengono rifiutati perché non definiscono un tratto aperto positivo.
Contratto di ingresso, limiti ISO e forma della risposta
Ogni oggetto deve includere i campi stringa start e end in forma ISO-8601: anno a quattro cifre, mese e giorno, opzionalmente seguiti da un’ora del giorno con ore, minuti, secondi e una parte frazionaria opzionale di secondo. Una Z finale significa UTC; un offset numerico come più zero due due punti zero zero o meno zero cinque due punti zero zero sposta i campi locali in UTC assoluto prima della fusione. I valori solo data sono trattati come mezzanotte UTC così le finestre giornaliere funzionano senza inventare un orologio.
I campi opzionali null non vengono mai emessi. La validazione fallita non consuma saldo.
Dove serve il totale del tempo coperto
Le piattaforme di personale e reperibilità uniscono frammenti di turno così paghe e regole di affaticamento addebitano copertura continua anziché ore doppie sovrapposte. I sistemi di prenotazione di strutture e laboratori calcolano l’occupazione di una sala o di uno strumento quando le prenotazioni si sovrappongono, alimentando dashboard di utilizzo senza funzioni SQL a finestra su ogni report. Le pagine di affidabilità e stato trasformano molti intervalli parziali di incidente in un’unica durata di indisponibilità coperta per il calcolo mensile di SLA.
I tracciatori di tempo di progetto consolidano log di sessione duplicati da client mobili e desktop che hanno registrato lo stesso lavoro due volte con orologi leggermente diversi. Abbini questo strumento all’intersezione di due intervalli quando Le serve la sovrapposizione di esattamente due intervalli, o a utilità di umanizzazione della durata quando vuole solo testo leggibile da un conteggio di secondi.
Casi d'uso
Totali di copertura di reperibilità e turni
Unisce finestre di servizio sovrapposte di un team così paghe e affaticamento usano ore coperte invece di contare due volte i turni concorrenti.
Occupazione di sale e risorse
Somma l’unione delle prenotazioni di un banco di laboratorio o di una sala riunioni quando si sovrappongono, per report di utilizzo senza SQL grezzo.
Indisponibilità SLA da outage parziali
Collassa molti intervalli di incidente in un’unica durata di outage coperta per il calcolo mensile di disponibilità e le esportazioni di stato.
Domande frequenti
I minuti sovrapposti vengono contati due volte?
No. Gli intervalli vengono ordinati e uniti prima della somma, così la copertura condivisa contribuisce una sola volta alla durata totale coperta.
Cosa succede se due intervalli si toccano solo a un estremo?
Si fondono in un segmento continuo. I limiti che si toccano non creano un intervallo e non aggiungono durata oltre il tratto combinato.
Quanti intervalli posso inserire?
Da uno a 200 nello stesso elenco. Ognuno richiede un inizio e una fine, e l'inizio deve precedere strettamente la fine; gli intervalli di durata zero o invertiti vengono rifiutati.
Posso inserire date senza orario?
Sì. Una data da sola viene letta come mezzanotte UTC, il che semplifica il lavoro per giorni. Gli orari possono avere Z per UTC o uno scarto numerico, e tutto viene convertito in UTC prima dell'unione.
Come vedo quali intervalli sono stati uniti?
Il risultato elenca ogni segmento unito con inizio, fine e durata propri, e mostra quanti intervalli ha inserito accanto a quanti ne restano dopo l'unione, così può verificare il totale.
Strumenti correlati
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/intervals-total-duration \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"intervals":[{"start":"2020-01-01T10:00:00Z","end":"2020-01-01T12:00:00Z"},{"start":"2020-01-01T11:00:00Z","end":"2020-01-01T13:00:00Z"}]}'const res = await fetch("https://api.kit.forhosting.com/date/intervals-total-duration", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"intervals": [
{
"start": "2020-01-01T10:00:00Z",
"end": "2020-01-01T12:00:00Z"
},
{
"start": "2020-01-01T11:00:00Z",
"end": "2020-01-01T13:00:00Z"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/intervals-total-duration",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"intervals": [
{
"start": "2020-01-01T10:00:00Z",
"end": "2020-01-01T12:00:00Z"
},
{
"start": "2020-01-01T11:00:00Z",
"end": "2020-01-01T13:00:00Z"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/intervals-total-duration", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"intervals":[{"start":"2020-01-01T10:00:00Z","end":"2020-01-01T12:00:00Z"},{"start":"2020-01-01T11:00:00Z","end":"2020-01-01T13:00:00Z"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"intervals":[{"start":"2020-01-01T10:00:00Z","end":"2020-01-01T12:00:00Z"},{"start":"2020-01-01T11:00:00Z","end":"2020-01-01T13:00:00Z"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/intervals-total-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
{
"intervals": [
{
"start": "2020-01-01T10:00:00Z",
"end": "2020-01-01T12:00:00Z"
},
{
"start": "2020-01-01T11:00:00Z",
"end": "2020-01-01T13:00:00Z"
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.intervals_total_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. |
Note tecniche
Forme ISO non valide, intervalli invertiti ed elenchi vuoti falliscono con invalid_input e non vengono addebitati.
Cosa significa la durata coperta dopo la fusione delle sovrapposizioni
Questo endpoint implementa l’algoritmo classico di ordinamento e fusione: ogni inizio e fine viene convertito in millisecondi di epoca UTC, l’elenco è ordinato per ora di inizio, e ogni intervallo successivo o estende il segmento aperto corrente quando inizia alla fine di quel segmento o prima, oppure apre un nuovo segmento quando c’è un intervallo positivo. La risposta riporta input_count rispetto a merged_count così Lei vede quanta consolidazione è avvenuta, e elenca ogni segmento fuso con il proprio inizio, fine e durata per le verifiche. Usi total_duration_ms quando serve una misura intera primaria; usi total_duration_hours quando le dashboard si aspettano ore frazionarie arrotondate a dodici decimali stabili; usi days, hours, minutes e seconds insieme per rendere una riga leggibile senza rifare la divisione.
Contratto di ingresso, limiti ISO e forma della risposta
Invii un corpo JSON con un array intervals obbligatorio da uno a duecento oggetti. Dopo la normalizzazione, start deve essere strettamente precedente a end; limiti uguali o invertiti falliscono con invalid_input indicando l’indice dell’intervallo. In caso di successo il corpo include input_count, merged_count, total_duration_ms, total_duration_seconds, total_duration_hours, i campi di scomposizione non negativi days, hours, minutes, seconds e milliseconds, una stringa formattata compatta come zero d tre h zero m zero s, l’array ordinato merged_intervals con estremi ISO UTC, e method impostato a intervals_total_duration. Esempio: due finestre orarie sovrapposte dalle dieci alle dodici e dalle undici alle tredici UTC si fondono in un segmento di tre ore e total_duration_ms di dieci milioni ottocentomila. Mantenga l’elenco sotto il massimo pubblicato così i Worker di edge restano entro i budget di memoria coprendo comunque lotti realistici.
Dove un’API di durata totale di intervalli crea valore
Poiché l’implementazione è pure parse di livello A, ogni chiamata riuscita costa il prezzo base pubblicato $0.002 senza token di modello e senza rete in uscita. Fissi merged_intervals e total_duration_ms nei test così i refactor non cambiano in silenzio la semantica di fusione al contatto.
Domande tecniche
Come si calcola la durata totale di intervalli di tempo sovrapposti?
Invii JSON con intervals come array di {start, end} in ISO-8601. L’API unisce le sovrapposizioni in UTC e restituisce total_duration_ms, total_duration_seconds, total_duration_hours e merged_intervals.
Quali errori di ingresso vengono rifiutati?
Intervals vuoti o assenti, non oggetti, stringhe ISO non valide, giorni di calendario impossibili e start non strettamente precedente a end falliscono con invalid_input e non vengono addebitati.
Quanto costa lo strumento di durata totale di intervalli di tempo?
Lo strumento nel browser è gratuito. Le richieste API usano il saldo KIT prepagato a $0.002 per chiamata riuscita; l’ingresso non valido non viene addebitato.