2つの時間区間の重複時間を計算
この計算ツールは、明示された2つの日時区間に共通する時間を正確に求めます。各区間の開始と終了を、Zまたは数値のUTCオフセットを含むISO 8601形式で入力してください。すべての境界を同じUTC時間軸へ変換し、遅い方の開始と早い方の終了を選んで、重複時間をミリ秒、秒、分、時間で返します。区間が離れている場合や境界で接するだけの場合は0になるため、予定管理、請求、監視、レポート作成にそのまま利用できます。
無料で実行
2つの区間の境界を明確に指定します
最初の区間の開始と終了、続いて2番目の区間の開始と終了という4つの値を入力します。各値には、暦日、秒までの時刻、Zまたは+02:00や-05:30のような明示的オフセットを含む完全なISO 8601日時が必要です。オフセットを必須にすることで、ローカル時刻が別のコンピューターで異なる意味に解釈されることを防ぎます。各開始は、対応する終了より前でなければなりません。本ツールは半開区間として扱い、開始を区間に含め、終了を含まない境界とします。この規則により、連続する予約、勤務、処理枠が接するときに同じ瞬間を二重計上しません。秒の小数部は1桁から3桁まで受け付け、ミリ秒へ正規化します。暦日と時刻要素は直接検証するため、存在しない日付や不正な時刻は入力エラーになります。重複の有無にかかわらず、常に同じ4項目をご指定ください。
決定的なUTC計算の仕組みをご確認ください
比較の前に、4つの境界を1本のUTC時間軸上へ配置します。末尾がZの値はすでにUTCです。正のオフセットはその分を引き、負のオフセットはその分を加えます。そのため、表記が異なる日時でも同じ瞬間を示すことがあります。重複は2つの開始のうち遅い方から始まり、2つの終了のうち早い方で終わります。その終了が算出した開始より後なら、差が重複時間です。それ以外は正確に0となります。実装にはグレゴリオ暦の算術と整数ミリ秒を使用し、端末の時計、ロケール、タイムゾーンデータベース、ネットワーク、乱数、JavaScriptのDateを参照しません。したがって、同じ入力からは常に同じ結果が得られます。出力は1つの計算結果をミリ秒、秒、分、時間で表すため、データベース、請求書、画面表示、予定規則に適した単位をお選びいただけます。
実際の業務で安全に結果を利用します
既知の2つの時間枠を比較するときにご利用ください。たとえば、勤務と承認済み休暇、設備稼働と料金時間帯、障害とサービス時間、予約と空き枠の比較です。正の値は交差の有無だけでなく、共有される時間量を示します。0には、区間が離れている場合と、一方の終了時刻が他方の開始時刻と完全に一致する場合があります。半開区間の規則では、どちらにも共通する経過時間はありません。金額や割当量の計算では、overlap_millisecondsまたはoverlap_secondsを元の値として使い、文書化された丸めを結果取得後に適用してください。業務規則で必要な場合を除き、入力境界を事前に丸めないでください。本APIは明示的オフセットのみを扱い、America/New_Yorkのような地域名や夏時間規則を推測しません。ローカル時刻は事前に変換してください。APIは1回$0.002で、ブラウザーでは同じ計算を対話的にローカル実行できます。
活用例
勤務時間の範囲を測定
勤務のうち、有人、支払い対象、または承認済みの運用時間枠に入る部分を計算します。
障害時間を割り当て
停止時間のうち、契約上のサポート時間またはサービス時間内に発生した部分を測定します。
予約の競合を確認
単なる有無の回答ではなく、2つの予約が共有する時間を数値で確認します。
よくある質問
区間が重ならない場合はどうなりますか?
4つの時間項目はすべて0を返します。一方が終了した瞬間に他方が開始する場合も同じです。
異なるUTCオフセットを使用できますか?
はい。各境界にZまたは個別の数値オフセットを指定でき、すべて共通のUTC時間軸で比較します。
区間の端点は含まれますか?
半開区間を使用し、開始は含み、終了は含みません。そのため、隣接する区間の共通時間は0です。
サーバーのタイムゾーンを使用しますか?
いいえ。Date、タイムゾーンデータベース、端末時計、ロケールを使わず、暦とオフセットの算術で処理します。
APIリクエストの料金はいくらですか?
1回あたり$0.002です。ブラウザーでの対話的な実行にはAPI料金が発生しません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
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)リクエスト例
{
"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": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.overlap_duration",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |