範囲内のうるう年
2つの年を入力すると、その間のうるう年が両端を含めてすべて分かります。2000年から2024年までなら7回で、2000年と2024年も入ります。1900年は除かれ、2000年は数えられます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 開始年
- 2,000
- 終了年
- 2,024
- 年の幅
- 25
- 数量
- 7
- 規則
- Gregorian: year%4==0 and (year%100!=0 or year%400==0)
うるう年は2月29日という1日を追加し、民用暦が回帰年とずれないようにします。今日世界の大半で使われているグレゴリオ暦では、4で割り切れる年がうるう年ですが、世紀年(100の倍数)は400でも割り切れる場合に限ります。つまり2000年はうるう年、1900年はうるう年ではなく、2024年や2028年のような通常の年はうるう年です。このツールは、開始年と終了年(両端を含む)を受け取り、純粋で決定的なうるう年判定で範囲内のすべての年を走査し、個数と順序付きの一覧の両方を返します。開始年が終了年より大きい場合は、境界を暗黙に入れ替えるのではなく、明確なバリデーションエラーで失敗します。
グレゴリオ暦のうるう年の決まり方
グレゴリオ改革は、4年ごとをうるう年とする古いユリウス暦の規則を精緻化しました。グレゴリオ規則では、年Yがうるう年であるのは、Yが4で割り切れ、かつYが100で割り切れないか、Yが400で割り切れる場合に限ります。
簡潔に書くと、Y modulo 4 が0であり、かつ(Y modulo 100 が0でないか、Y modulo 400 が0である)ときにうるう年です。400の判定を通らない世紀年(1700年、1800年、1900年、2100年)は365日だけの平年であり、1600年と2000年はうるう年のままです。
この機能は1から9999までのすべての整数年にプロレプティック・グレゴリオ規則を一貫して適用しており、KITカタログの他の暦ツールとも一致しています。実装はJavaScriptのDateを呼び出さず、システム時計も読まず、ネットワークにもアクセスしません。
2つの整数年をparseし、逆転した範囲を拒否してから、両端を含む区間を走査してうるう年判定を通過した年をすべて集めます。
うるう年範囲リストが実務で登場する場面
学校やコンテストの問題では、2つの年の間にうるう年がいくつあるか、ある世紀のどの年に2月29日があるかが頻繁に問われます。個数と完全な一覧の両方を返す信頼できるオラクルがあれば、採点やデモ準備が速くなります。
多年度のロードマップ、継続率コホート、請求カレンダーを構築する製品・運用チームは、スケジュール、SLA、日数計算式を正しく保つため、2月が29日ある年を把握する必要があります。ICSファイル、学期カレンダー、長期の給与期間を生成するソフトウェアは、ホストのタイムゾーンやDateコンストラクタの癖に依存しない純粋関数の恩恵を受けます。
年間通算日、2つのISO日付間の週末数、ユリウス日数が必要になった場合は、このうるう年範囲ページに詰め込まず、別の検索意図とランディングとして扱ってください。
活用例
宿題やコンテストの解答キー
2つの年の間のうるう年の順序付き一覧と個数を生成し、教師と自動採点が1つのグレゴリオ暦の正解を共有できます。
多年度の計画・請求カレンダー
製品ロードマップ、継続率コホート、請求ホライズンで、タイムゾーンに左右されるDateのバグなしにすべての2月29日をマークできます。
よくある質問
どのうるう年規則を使いますか?
プロレプティック・グレゴリオ規則です。4で割り切れる年がうるう年ですが、世紀年は400で割り切れる必要があります。つまり2000年はうるう年、1900年は違い、2024年はうるう年です。
年の範囲は両端を含みますか?
単一年の範囲では、1つのうるう年か、個数0の空リストが返ります。
JavaScriptのDateを使いますか?
いいえ。 アルゴリズムはグレゴリオうるう年判定に対する純粋な整数演算です。Dateなし、ネットワークなし、乱数なしです。
料金はいくらですか?
ブラウザツールは無料でローカル実行されます。無効な入力は課金されません。
開始年を終了年より後にするとどうなりますか?
黙って入れ替えることはせず、分かりやすいメッセージを出して受け付けません。どちらかの年の打ち間違いにすぐ気付けます。早いほうの年を先に入力し、1年だけの範囲も指定できます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/date/leap-years-between \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"start_year":2000,"end_year":2024}'const res = await fetch("https://api.kit.forhosting.com/date/leap-years-between", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"start_year": 2000,
"end_year": 2024
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/leap-years-between",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"start_year": 2000,
"end_year": 2024
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/leap-years-between", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"start_year":2000,"end_year":2024}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"start_year":2000,"end_year":2024}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/leap-years-between", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"start_year": 2000,
"end_year": 2024
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.leap_years_between",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
グレゴリオ暦のうるう年の決まり方
結果のJSONには、境界、年の幅、個数、昇順の一覧、そして短い規則文字列が含まれるため、ソースを開かなくてもアルゴリズムを監査できます。成功したAPI呼び出しの料金は公開されている$0.002/件で、バリデーション失敗ではプリペイド残高を消費しません。
送信するものと返ってくるもの
どちらも必須で、1から9999までの有限の整数である必要があります。典型的なチェックには、現代の年代向けの2000〜2024年、1900年が飛ばされ2000年が飛ばされないことを示す1896〜1904年、唯一のうるう年候補がその年自身である単一年範囲などがあります。start_yearとend_yearという2つの整数フィールドを送信します。範囲は両端を含みます。 2000年から2004年へのリクエストは、2000年、2001年、2002年、2003年、2004年のうちのすべてのうるう年を報告します。start_yearがend_yearを超える場合、ハンドラーはinvalid_inputで失敗し、開始が終了を超えてはならないというメッセージを返すため、クライアントは推測ではなく順序を修正できます。フィールドの欠落、非数値文字列、浮動小数点数、NaN、Infinity、許可範囲外の年もinvalid_inputで失敗し、課金されません。成功時のレスポンスには、start_year、end_year、inclusiveがtrue、year_spanが終了−開始+1、countがうるう年一覧の長さ、leap_yearsが整数の昇順配列として含まれ、さらにグレゴリオ判定を記述するruleとformulaの文字列が付きます。ブラウザ経路はローカルで無料実行され、API料金は成功1件あたり$0.002です。
うるう年範囲リストが実務で登場する場面
この機能は純粋なparseエンジンなので、API料金は公開されている$0.002/件で、バリデーション失敗は残高を消費しません。
連携の活用例
データウェアハウスの日付ディメンションテスト
ETL検証、会計カレンダー、数十年・数世紀にわたるプロレプティック年表のために、グレゴリオ暦のうるう年リストをfixture化します。
技術的な質問
start_yearがend_yearより大きい場合は?
リクエストはinvalid_inputで失敗します。境界は自動で入れ替えられないため、逆転した入力が暗黙に受け入れられることはありません。