習慣の継続日数計算:現在と最長の記録
この習慣継続日数計算ツールは、達成日の一覧から2つの指標を算出します。最新の達成日まで続く連続日数と、履歴全体で最も長い連続日数です。日付の順序は問いません。また、同じ日付が複数あっても1日として数えるため、習慣管理アプリ、日誌、表計算ソフトの出力をそのまま利用できます。経過した現地時間ではなく暦日を基準にするので、タイムゾーンや夏時間の変更に左右されず、常に安定した結果を得られます。
無料で実行
信頼できる達成履歴をご用意ください
習慣を達成した各暦日を YYYY-MM-DD 形式で入力してください。計算前に日付を並べ替えるため、入力一覧をあらかじめ整列する必要はありません。重複も問題になりません。アプリが同じ達成記録を2回出力していても、その日は1回だけ数えます。1日のうち何時に達成しても、その暦日全体の達成として扱います。そのため、時刻、タイムスタンプ、タイムゾーンのオフセットは受け付けません。この仕様により、継続日数の意味が明確になり、同じ日の2件の記録を2日分の進捗として誤認することを防げます。最長記録を正確に調べる場合は、直近1か月や画面に表示された範囲だけでなく、履歴全体を入力してください。一覧には少なくとも1つの日付が必要であり、各項目は実在する暦日でなければなりません。2月30日、不完全な日付、異なる形式の文字列は自動修正せず、エラーとしてお知らせします。厳格に検証することで、不正な出力から誤解を招く記録が作られる前に問題を発見できます。
現在と最長の継続日数をご確認ください
現在の継続日数とは、入力された最新の達成日で終わる連続した暦日の数です。この定義では本日の日付を参照しません。そのため、同じ入力には常に同じ結果が返り、過去の履歴も再現可能です。たとえば、最新の記録が月曜日、火曜日、水曜日であれば、後日計算しても現在の継続日数は3です。火曜日がなければ月曜日から水曜日までの並びは途切れます。継続には隣り合う暦日が必要だからです。最長の継続日数は、履歴全体に含まれるこのような並びのうち最大のものです。したがって、現在の記録より古く、長い場合があります。結果には、重複を除いた達成日数と、計算に用いた最新の日付も表示します。重複が除去されたことや、意図した履歴が届いたことを確認しやすくなります。うるう日、月末、年末をまたぐ場合も、通常の隣接する暦日として扱います。端末の時計や利用者の所在地に依存せず、習慣管理に役立つ指標を得られます。
管理や振り返りに結果をご活用ください
現在の継続日数は、記録された履歴の末尾にある勢いを示す指標として、最長の継続日数は自己ベストの基準としてご利用ください。習慣管理アプリではイベント履歴を読み込んだ後に両方を計算できます。表計算を使う処理では、日付の列を送信し、月次レビューの横に結果を保存できます。入力順序は結果に影響しないので、クライアント側で別途並べ替える必要はありません。重複は1回だけ数えるため、再試行や複数の出力を統合しても数値が不当に増えることはありません。ただし、継続日数が示すのは記録上の一貫性であり、努力、質、長期的な効果そのものではありません。休息日を設ける習慣や週間予定に従う習慣では、毎日の厳密な連続記録が望ましい行動を正しく表さない場合があります。その場合は、ご自身の予定に合わせて日付を変換してからご利用ください。API リクエストには表示されている基本料金 $0.002 が適用されます。ブラウザー版も、ネットワーク、乱数、現在日への依存がない同じ純粋な計算処理を使用します。
活用例
習慣管理アプリに継続記録を追加
達成日の読み込みや更新のたびに、現在の継続状況と過去最長の記録を計算できます。
日誌の出力を振り返り
日付付き記録の列を手作業で並べ替えずに、わかりやすい継続性の指標へ変換できます。
複数の管理履歴を統合
異なる情報源の日付をまとめても、重複した達成記録によって継続日数が増えることはありません。
よくある質問
現在の継続日数とは何ですか?
入力された履歴の最新日で終わる連続した日数です。本日の日付との比較は行いません。
同じ日付があると継続日数は増えますか?
いいえ。同じ暦日が入力に複数回含まれていても、1回だけ数えます。
日付を並べ替える必要がありますか?
いいえ。日付を検証し、重複を除き、並べ替えてから継続日数を計算します。
一覧が空の場合はどうなりますか?
達成日が1つもなければ継続日数を計算できないため、無効な入力としてエラーを返します。
うるう年や月をまたぐ日付に対応していますか?
はい。有効かつ隣接する暦日は、月末、年末、うるう日をまたいでも連続として扱います。
API リクエストの料金はいくらですか?
API リクエスト1回ごとに基本料金 $0.002 が適用されます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/final3/habit-streak-calculate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"dates":["2026-07-20","2026-07-21","2026-07-23","2026-07-24","2026-07-25"]}'const res = await fetch("https://api.kit.forhosting.com/final3/habit-streak-calculate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"dates": [
"2026-07-20",
"2026-07-21",
"2026-07-23",
"2026-07-24",
"2026-07-25"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/final3/habit-streak-calculate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"dates": [
"2026-07-20",
"2026-07-21",
"2026-07-23",
"2026-07-24",
"2026-07-25"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/final3/habit-streak-calculate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"dates":["2026-07-20","2026-07-21","2026-07-23","2026-07-24","2026-07-25"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"dates":["2026-07-20","2026-07-21","2026-07-23","2026-07-24","2026-07-25"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/final3/habit-streak-calculate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"dates": [
"2026-07-20",
"2026-07-21",
"2026-07-23",
"2026-07-24",
"2026-07-25"
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "final3.habit_streak_calculate",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |