2つの日付の中点
2つの日付の中点を求めることは、日数の数え上げやカウントダウン、年齢計算とは別の問いです。時間軸上の既知の2点のちょうど中間にある唯一の瞬間を求めます。この中点計算機は、Zまたは数値オフセット付きの完全なタイムスタンプ、あるいはUTCの真夜中として扱う日付のみの文字列という、明示的なISO-8601日時を2つ受け取り、純粋なグレゴリオ算術で双方をエポックミリ秒に変換し、和の決定的な床関数で平均し、ミリ秒精度のUTC中間日時を返します。連続する2日の真夜中同士なら正午、1秒の間隔なら0.5秒、同一端点なら同じ瞬間、といった古典的な確認ができます。エンジンはホスト時計もネットワークもプラットフォームのDateオブジェクトも使わないため、同じ入力は無料のブラウザウィジェットでも、成功リクエストあたり$0.002のAPIでも常に同じ中点になります。プロジェクトの中間マイルストーン、請求ウィンドウの中心、CIの再現可能なフィクスチャに使えます。
無料で実行
瞬間の中点の意味と応答に含まれる内容
2つの絶対瞬間を平均することは、数直線上の線分の中点を求める操作の時間版です。会議・研究・キャンペーン・契約ウィンドウの開始と終了が分かっていれば、中点は両端からミリ秒単位で等距離にある唯一のUTC瞬間です。複数日にまたがる期間を「3月の半ば」とざっくり言うときの暦上の中日でもなく、週末を飛ばす営業日中点でもなく、オフセットを無視して各暦日がちょうど24時間だと仮定する壁時計平均でもありません。startとendをISO-8601文字列で渡します。それぞれは任意の小数秒とZまたは時分オフセット付きの完全日時でも、日付のみのYYYY-MM-DD(UTC真夜中)でもよく、単純な暦ペアでも使えます。計算機は両日がグレゴリオ暦上に実在することを検証し(うるう日はうるう年のみ)、先発的な民用算術で各入力をUTCエポックミリ秒に変換し、midpoint_epoch_msを両エポックの和を2で割った床に設定します。ミリ秒合計が奇数でも決定的な半ミリ秒の選択が1つ得られます。応答は監査のため元のstartとendをエコーし、midpointを小数3桁と末尾ZのUTC ISO文字列で返し、数値パイプライン向けにstart_epoch_ms・end_epoch_ms・midpoint_epoch_msを報告し、絶対距離のspan_msとendからstartを引いたsigned_span_msで方向も示します。短いformula欄が平均の定義を繰り返し、契約を答えの横に残せます。欠落したstart/end、非ISO-8601、2023-02-29のような存在しない日、不正な時刻成分、1〜9999年の範囲外は拒否されます。暦日数やカウントダウン部品、年月の年齢が必要なら専用ツールを使い、本ページは検証済み2タイムスタンプ間の正確な中間瞬間のみに答えます。
startとendの読み方と中点の再現性
第1フィールドはstartが推奨ですが、from・date1・a・beginの別名も受け付けるため、表計算・クエリ文字列・フォームは列名を変えずに同じ契約を再利用できます。第2フィールドはendで、to・date2・b・finishの別名があります。各文字列は前後の空白を取り除き、日付のみはUTC真夜中になります。日時は日付と時刻の間にTまたは空白を使え、小数秒は受け付けて平均前に整数ミリ秒へ切り捨て、サブミリ秒のノイズが別の中点を生まないようにします。+02:00や-05:00のようなオフセットは、ローカル民用エポックからオフセット分を引いてUTCへ変換するため、同じ絶対区間を指すニューヨークの夜とパリの朝でもUTC上で正しく平均されます。内部では各民用三つ組をよく知られたdays_from_civilでシリアル日数へ写像し、1日あたり86400000ミリ秒を掛け、時刻のミリ秒を足し、オフセットを調整します。Date・Math.random・ネットワークは使いません。中点は逆写像civil_from_daysで再整形し、印字されたUTC文字列がmidpoint_epoch_msと完全一致します。同一入力は同じ瞬間を中点にし、順序を入れ替えても中点と絶対幅は変わらずsigned_span_msの符号だけが反転します。各段階が決定的なので、このページの無料ブラウザ実行と有料API経路は同じモジュールでバイト一致し、連続する真夜中の中点として2024-01-01T12:00:00.000Zを固定するCIフィクスチャに適しています。
計画・科学・ソフトウェアでの中点日時演算の位置づけ
プロジェクト管理者は、ローンチ窓やスプリントが2つの明示タイムスタンプで定義され、関係者が曖昧な週半ばラベルではなく窓の中央のレビュー時刻を1つ欲しいときに中間チェックポイントを置きます。研究者や実験室システムは観測区間の中点を記録し、要約表がプロットや結合用に代表的な1瞬間を示し、開始や終了を恣意的に選ばないようにします。財務・運用チームは、台帳にISO瞬間のペアとして既に保存された期間の「真ん中」を方針が指すとき、請求や通知の窓を中央に合わせます。開発者はスクリプトから契約を呼び出し、スケジューラ用の決定的中点を生成し、レポートの中間フィールドを検証し、ホストのDateによるタイムゾーンずれのない純UTC平均という製品要件を満たします。教育者や規格執筆者は、1秒区間の中点が半秒であること、オフセット付き入力でもZ正規化の1回答に収束することを示すために使います。本ページでは作業はすべてブラウザ内で完結し、APIでは成功した照会ごとに$0.002、検証失敗は課金されず、応答後に保存しません。無料の対話探索と同一の有料APIという分割はKITティアAカタログの他項目と一致し、数学的結果を変えずに単発確認からパイプラインへ移行できます。関連する時間ステップにはdays-betweenやcountdown-between、エポック補助を組み合わせ、2つの日付の中点を正確な日時として探す検索意図にはこのページを使ってください。
活用例
プロジェクトとキャンペーンの中間マイルストーン
2つのISOタイムスタンプで定義されたスプリント・ローンチ・マーケ施策の、窓の中央レビュー時刻を正確に計算します。
観測・実験の中点
観測区間の代表UTC瞬間を1つ記録し、プロットや結合が開始や終了を恣意的に選ばないようにします。
決定的なCIと請求のフィクスチャ
Dateやホスト時計に依存せず、単体テスト・台帳中心・パイプライン向けに再現可能な中点値を生成します。
よくある質問
2つの日付の中点計算機の料金は?
このページではブラウザで無料です。APIでは成功リクエストが$0.002、無効入力は課金されません。
中点はどのように定義されますか?
両入力をUTCエポックミリ秒に変換します。midpoint_epoch_msはfloor((start_ms + end_ms) / 2)で、ミリ秒精度のUTC ISO-8601文字列に整形します。
タイムゾーンやオフセットは結果に影響しますか?
正しく影響します。各入力のオフセットは平均の前にUTCへ変換され、中点は常に末尾ZのUTCで返ります。
2つの日時が同じ、またはendがstartより前の場合は?
同一入力はその瞬間を中点として返します。endがstartより前でも中点は変わらず、signed_span_msだけが負になります。
日付のみの値は受け付けますか?
はい。YYYY-MM-DDは当該暦日のUTC真夜中として扱い、他の瞬間と同様に平均します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/date/midpoint-between-dates \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"start":"2024-01-01T00:00:00Z","end":"2024-01-02T00:00:00Z"}'const res = await fetch("https://api.kit.forhosting.com/date/midpoint-between-dates", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"start": "2024-01-01T00:00:00Z",
"end": "2024-01-02T00:00:00Z"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/midpoint-between-dates",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"start": "2024-01-01T00:00:00Z",
"end": "2024-01-02T00:00:00Z"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/midpoint-between-dates", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"start":"2024-01-01T00:00:00Z","end":"2024-01-02T00:00:00Z"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"start":"2024-01-01T00:00:00Z","end":"2024-01-02T00:00:00Z"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/midpoint-between-dates", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"start": "2024-01-01T00:00:00Z",
"end": "2024-01-02T00:00:00Z"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.midpoint_between_dates",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |