Überlappungsdauer zweier Zeitintervalle berechnen
Dieser Rechner ermittelt genau, wie viel Zeit zwei ausdrücklich angegebene Datums- und Zeitintervalle gemeinsam haben.
Im Browser ausführen – kostenlos
Geben Sie Anfang und Ende jedes Intervalls im ISO-8601-Format mit Z oder einem numerischen UTC-Offset ein. Die Berechnung überführt alle Grenzen auf dieselbe UTC-Zeitachse, wählt den späteren Anfang und das frühere Ende und gibt die gemeinsame Dauer in Millisekunden, Sekunden, Minuten und Stunden aus. Getrennte Intervalle sowie Bereiche, die sich nur berühren, ergeben null und lassen sich dadurch einfach für Planung, Abrechnung, Überwachung und Berichte verwenden.
Legen Sie beide Intervalle eindeutig fest
Geben Sie vier Werte ein: Anfang und Ende des ersten Intervalls, gefolgt von Anfang und Ende des zweiten. Jeder Wert muss ein vollständiger ISO-8601-Zeitstempel mit Kalenderdatum, Uhrzeit einschließlich Sekunden und entweder Z oder einem ausdrücklichen Offset wie +02:00 oder -05:30 sein. Der vorgeschriebene Offset verhindert, dass eine lokale Uhrzeit auf einem anderen Rechner anders ausgelegt wird. Jeder Anfang muss vor dem zugehörigen Ende liegen. Der Rechner behandelt die Intervalle als halboffene Bereiche: Der Anfang gehört dazu, das Ende bildet eine ausgeschlossene Grenze. So wird derselbe Zeitpunkt nicht doppelt gezählt, wenn aufeinanderfolgende Buchungen, Schichten oder Verarbeitungsfenster zusammentreffen. Für Sekunden sind eine bis drei Nachkommastellen zulässig; sie werden auf Millisekunden normiert. Kalenderdaten und Uhrzeitbestandteile werden unmittelbar geprüft, sodass unmögliche Angaben einen Eingabefehler auslösen. Verwenden Sie stets dieselben vier Felder, unabhängig davon, ob Sie eine Überschneidung erwarten.
So funktioniert die deterministische UTC-Berechnung
Vor dem Vergleich setzt die Berechnung alle vier Grenzen auf eine gemeinsame UTC-Zeitachse. Ein mit Z endender Wert liegt bereits in UTC vor. Bei einem positiven Offset wird dieser abgezogen, bei einem negativen dagegen addiert. Deshalb können unterschiedlich geschriebene Zeitstempel denselben Zeitpunkt bezeichnen. Die Überschneidung beginnt mit dem späteren der beiden Anfänge und endet mit dem früheren der beiden Enden. Liegt dieses Ende nach dem berechneten Anfang, ist die Differenz die gemeinsame Dauer; andernfalls beträgt sie genau null. Die Implementierung verwendet gregorianische Kalenderarithmetik und ganzzahlige Millisekunden. Sie greift weder auf Rechneruhr, Gebietsschema, Zeitzonendatenbank, Netzwerk, Zufall noch auf JavaScript Date zurück. Gleiche Eingaben führen daher immer zum gleichen Ergebnis. Die Ausgabe stellt dieselbe Dauer in Millisekunden, Sekunden, Minuten und Stunden bereit, damit Sie die passende Einheit für Datenbank, Rechnung, Anzeige oder Planungsregel auswählen können.
Setzen Sie das Ergebnis sicher ein
Nutzen Sie die Überschneidungsdauer, wenn zwei bekannte Zeitfenster verglichen werden müssen: eine Schicht mit genehmigter Abwesenheit, eine Maschinenlaufzeit mit einem Tarifzeitraum, ein Vorfall mit einem Servicefenster oder eine Buchung mit einem verfügbaren Block. Ein positiver Wert zeigt die gemeinsame Zeitmenge und nicht nur das Vorhandensein einer Überschneidung. Null bedeutet, dass die Intervalle getrennt sind oder dass eines genau beim Beginn des anderen endet; nach der halboffenen Konvention gibt es in beiden Fällen keine gemeinsam verstrichene Zeit. Verwenden Sie für Beträge oder Kontingente overlap_milliseconds oder overlap_seconds als Ausgangswert und wenden Sie Ihre dokumentierte Rundung erst danach an. Runden Sie Grenzen nicht vorher, außer Ihre Fachregel verlangt dies. Der Endpunkt verarbeitet nur ausdrückliche Offsets, keine Namen wie America/New_York, und leitet keine Sommerzeitregeln ab. Wandeln Sie lokale Zeiten vorher um. Ein API-Aufruf kostet $0.002; im Browser ist dieselbe Berechnung interaktiv lokal möglich.
Anwendungsfälle
Schichtabdeckung messen
Berechnen Sie, welcher Anteil einer Schicht in ein besetztes, bezahltes oder genehmigtes Betriebsfenster fällt.
Störungszeit zuordnen
Messen Sie den Anteil eines Ausfalls, der während eines vertraglichen Support- oder Servicezeitraums lag.
Buchungskonflikte prüfen
Bestimmen Sie die gemeinsame Zeit zweier Buchungen, statt lediglich eine Ja-oder-Nein-Antwort zu erhalten.
Häufige Fragen
Was geschieht, wenn sich die Intervalle nicht überschneiden?
Alle vier Dauerfelder liefern null. Das gilt auch, wenn eines genau in dem Moment endet, in dem das andere beginnt.
Werden unterschiedliche UTC-Offsets unterstützt?
Ja. Jede Grenze kann Z oder einen eigenen numerischen Offset verwenden; alle werden auf derselben UTC-Zeitachse verglichen.
Sind die Intervallgrenzen eingeschlossen?
Die Berechnung nutzt halboffene Intervalle: Der Anfang ist enthalten, das Ende ausgeschlossen. Benachbarte Intervalle teilen daher keine Dauer.
Verwendet die Berechnung die Serverzeitzone?
Nein. Sie nutzt gregorianische und Offset-Arithmetik ohne Date, Zeitzonendatenbank, Rechneruhr oder Gebietsschema.
Was kostet ein API-Aufruf?
Der Preis beträgt $0.002 pro Aufruf. Für die interaktive Ausführung im Browser fällt keine API-Gebühr an.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem 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)Beispiel-Anfrage
{
"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"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.overlap_duration",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |