Intersezione di intervalli
Inserisca due intervalli di tempo e ottenga la parte che condividono: dalle 10:00 alle 12:00 e dalle 11:00 alle 13:00 UTC si sovrappongono dalle 11:00 alle 12:00, un'ora esatta. Se si toccano soltanto, il risultato è vuoto. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Inizio dell'intervallo A
- 2020-01-01T10:00:00.000Z
- Fine dell'intervallo A
- 2020-01-01T12:00:00.000Z
- Inizio dell'intervallo B
- 2020-01-01T11:00:00.000Z
- Fine dell'intervallo B
- 2020-01-01T13:00:00.000Z
- Inizio dell’intersezione
- 2020-01-01T11:00:00.000Z
- Fine dell’intersezione
- 2020-01-01T12:00:00.000Z
- Durata dell’intersezione (millisecondi)
- 3.600.000
- Durata dell’intersezione (ore)
- 1
Calcola la sovrapposizione di due intervalli ISO con ordine stretto, durata in millisecondi e ore. Gratis, deterministico e privato nel browser.
Che cosa significa che due intervalli si sovrappongono
Due intervalli di tempo si sovrappongono quando esiste un tratto che appartiene a entrambi. Pensi a due prenotazioni di una sala o a due finestre di incidenti su un pannello di assistenza: la domanda non è quanto dura ciascuno, ma quale parte hanno in comune. La regola è breve. Il tratto comune inizia dal più tardivo dei due inizi e finisce al più anticipato dei due termini. Se quell'inizio viene strettamente prima di quel termine, c'è sovrapposizione e lei ottiene il tratto con la durata in millisecondi e in ore. Per 10:00-12:00 e 11:00-13:00 UTC la sovrapposizione va dalle 11:00 alle 12:00, un'ora esatta.
I casi limite che confondono
Due intervalli che si toccano soltanto, come uno che finisce alle 12:00 e un altro che inizia alle 12:00, non condividono tempo, perché la fine è considerata esclusa; il risultato è vuoto ed entrambe le durate valgono zero. Lo strumento non restituisce mai l'unione dei due intervalli, solo la loro parte comune. Ogni valore è un orario completo nel formato ISO 8601 e il risultato è espresso in UTC. Un intervallo che termina prima di iniziare, o un valore mancante o non valido, viene rifiutato invece di diventare una sovrapposizione vuota.
Ingressi, uscite e casi limite
Intervalli adiacenti che si toccano solo in un punto producono un risultato vuoto perché il confronto è strettamente minore, in linea con agende che trattano la fine come esclusiva. Le finestre sovrapposte restituiscono solo il tratto condiviso, mai l'unione. Tipi errati, campi assenti e intervalli invertiti falliscono presto così i clienti non vedono sovrapposizioni nulle silenziose.
Casi d'uso
Sovrapposizione riunioni
Trovate la finestra condivisa tra due prenotazioni con durate stabili.
Dashboard di supporto
Evidenziate quando coincidono due finestre di incidente senza foglio di calcolo.
Automazione
Chiamate la stessa funzione pura da script che fondono calendari.
Domande frequenti
È gratis?
Sì. Tier A gira interamente nel browser senza account.
Chiama la rete?
No. Il motore parse tiene tutto sul dispositivo.
I risultati sono stabili?
Sì. Matematica deterministica ed esempi dorati fissano il contratto.
Come si calcola la sovrapposizione di due intervalli?
La parte comune inizia dal più tardivo dei due inizi e finisce al più anticipato dei due termini. Se quell'inizio viene prima di quel termine, gli intervalli condividono del tempo; altrimenti il risultato è vuoto e la durata è zero.
Cosa succede se un intervallo finisce proprio quando inizia l'altro?
Il risultato è vuoto. La fine di ogni intervallo è considerata esclusa, come nella maggior parte dei sistemi di prenotazione, quindi due intervalli che si toccano in un solo istante non condividono tempo.
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/interval-intersection \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a_start":"2020-01-01T10:00:00.000Z","a_end":"2020-01-01T12:00:00.000Z","b_start":"2020-01-01T11:00:00.000Z","b_end":"2020-01-01T13:00:00.000Z"}'const res = await fetch("https://api.kit.forhosting.com/date/interval-intersection", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a_start": "2020-01-01T10:00:00.000Z",
"a_end": "2020-01-01T12:00:00.000Z",
"b_start": "2020-01-01T11:00:00.000Z",
"b_end": "2020-01-01T13:00:00.000Z"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/interval-intersection",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a_start": "2020-01-01T10:00:00.000Z",
"a_end": "2020-01-01T12:00:00.000Z",
"b_start": "2020-01-01T11:00:00.000Z",
"b_end": "2020-01-01T13:00:00.000Z"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/interval-intersection", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a_start":"2020-01-01T10:00:00.000Z","a_end":"2020-01-01T12:00:00.000Z","b_start":"2020-01-01T11:00:00.000Z","b_end":"2020-01-01T13:00:00.000Z"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a_start":"2020-01-01T10:00:00.000Z","a_end":"2020-01-01T12:00:00.000Z","b_start":"2020-01-01T11:00:00.000Z","b_end":"2020-01-01T13:00:00.000Z"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/interval-intersection", 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
{
"a_start": "2020-01-01T10:00:00.000Z",
"a_end": "2020-01-01T12:00:00.000Z",
"b_start": "2020-01-01T11:00:00.000Z",
"b_end": "2020-01-01T13:00:00.000Z"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.interval_intersection",
"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
Come funziona l'intersezione di intervalli
L'inizio dell'intersezione è il massimo dei due inizi e la fine è il minimo delle due fini. Due intervalli civili A e B sono definiti da quattro timestamp ISO-8601: a_start, a_end, b_start e b_end. Il motore analizza ogni estremo con il parser Date dell'ambiente, rifiuta valori non stringa o non analizzabili con messaggi invalid_input chiari che nominano il campo, ed esige che a_start sia strettamente minore di a_end e b_start strettamente minore di b_end. Quando l'inizio è strettamente minore della fine il risultato non è vuoto e porta start e end come stringhe ISO UTC più duration_ms e duration_hours arrotondate a un decimale stabile; altrimenti empty è vero, start e end sono null e entrambi i campi di durata valgono zero.
Ingressi, uscite e casi limite
I quattro campi sono stringhe obbligatorie così la sonda dello schema può costruire un campione completo dagli esempi pubblicati. Gli esempi dorati coprono una sovrapposizione di un'ora, una coppia disgiunta vuota, un intervallo A invertito e un payload completamente assente per associazioni di interfaccia oneste.
Determinismo, limiti e integrazione
L'implementazione è logica pura di motore parse senza rete, orologio o casualità oltre ai timestamp forniti, così ingressi identici producono sempre uscite identiche. Timestamp estremamente lontani restano soggetti alla precisione millisecondo IEEE del tipo Date della piattaforma; documentate quel contratto quando archiviate i risultati. Esaminate lo schema pubblicato prima di collegare metriche e associate solo le chiavi di successo documentate empty, start, end, duration_ms e duration_hours.
Domande tecniche
E se l'input non è valido?
Ricevete invalid_input con un messaggio chiaro in inglese.
Chi è l'autore?
Aspire nell'atelier KIT di ForHosting.