ISO日付の年に特定の曜日が何回あるか計算
明示したISO日付が属する暦年に、月曜日、金曜日、日曜日など指定した曜日が何回あるかを正確に計算します。完全な日付を検証して年を取り出し、グレゴリオ暦の規則を決定的な整数演算で適用します。端末の時計、ロケール、夏時間、実行環境の日付解析には依存しません。結果には正規化した曜日、回数、うるう年かどうか、年間日数、1月1日の曜日が含まれるため、根拠も確認できます。
無料で実行
日付と曜日を明示して入力します
日付はYYYY-MM-DDと完全に一致する形式で、曜日はMonday、Tuesday、Fridayなどの名前で入力してください。明示した日付は調査対象の暦年を決めるために使われ、月日によって集計期間が短くなることはありません。たとえば2024-01-01と2024-11-30はいずれも2024年全体を選択します。ただし、日付全体がグレゴリオ暦上で実在しなければなりません。2023-02-29や13番目の月のような不可能な値は、自動補正せずエラーとして扱います。曜日名では大文字と小文字を区別せず、Mon、Wed、Satなど一般的な英語3文字の略称も利用できます。応答では元の日付、選択した年、完全な英語名へ正規化した曜日、日曜日を起点とする曜日番号を返します。入力を明示することで現在日時への隠れた依存をなくし、保存したリクエストを後から同じ条件で再現できます。フォーム、定期処理、表計算、監査記録にも適した仕様です。
決定的な回数の求め方を確認します
通常のグレゴリオ暦年は365日で、52週と追加の1日から成ります。うるう年は366日で、52週と追加の2日です。そのため、すべての曜日が少なくとも52回あります。通常年では1月1日の曜日が53回目を迎え、うるう年では1月1日と1月2日に当たる2つの曜日がそれぞれ53回あります。計算では最初にグレゴリオ暦のうるう年規則を適用します。4で割り切れる年は原則うるう年ですが、世紀の年は400でも割り切れる場合だけ該当します。次に整数演算で1月1日の曜日を求め、指定曜日が追加の1日または2日に含まれるかを確認します。JavaScriptのDateオブジェクトは生成しません。このため、環境依存の解析、システムのタイムゾーン、夏時間、地域設定の差を避けられます。年間日数、うるう年フラグ、1月1日の曜日も返すので、52または53という答えを検証できます。
計画や検証に結果を活用します
毎週繰り返す予定から年間見積もりを作る場面で役立ちます。給与担当者は祝日を考慮する前に通常の金曜日の支払日数を把握でき、運用担当者は月曜日の営業日候補、学校は授業日候補を見積もれます。分析担当者は別システムが生成したカレンダーディメンションの検証にも利用できます。結果は純粋な暦上の曜日数であり、営業日数ではありません。祝日、組織の休業、休暇、地域行事、例外的な予定は、入力に地域や方針が含まれないため意図的に除外していません。必要な場合は、この値を透明な基準として、ご自身のカレンダーに従って対象日を差し引いてください。すでに基準日や報告日を扱う処理では、ISO日付から年を別途切り出して検証する必要もありません。ブラウザーとAPIは同じ純粋な計算処理を使用し、自動APIリクエストの料金は$0.002です。
活用例
定期的な稼働日を見積もる
祝日や休業日を差し引く前に、報告年内の指定曜日が何回あるかを数えます。
給与カレンダーを確認する
給与日として指定した曜日が、対象年に52回か53回あるかを確認します。
カレンダーデータを検証する
生成済み年間カレンダーの曜日別合計を、決定的なグレゴリオ暦の基準と比較します。
よくある質問
APIリクエストの料金はいくらですか?
APIリクエスト1回の料金は$0.002です。
年だけでなく完全な日付が必要なのはなぜですか?
検証済みの明示的なISO日付から年を取得でき、報告日や基準日をすでに扱う処理にも適合するためです。
同じ曜日が1年に53回を超えることはありますか?
ありません。グレゴリオ暦年は52週に追加の1日または2日を加えた長さです。
祝日は除外されますか?
除外されません。暦上の曜日だけを数え、地域や組織の休日規則は適用しません。
タイムゾーンによって結果は変わりますか?
変わりません。記載されたISO日付とグレゴリオ暦の整数演算だけを使い、現地時刻やDate解析は利用しません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/date/count-weekday-in-year \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2024-06-15","weekday":"Monday"}'const res = await fetch("https://api.kit.forhosting.com/date/count-weekday-in-year", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"date": "2024-06-15",
"weekday": "Monday"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/count-weekday-in-year",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"date": "2024-06-15",
"weekday": "Monday"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/count-weekday-in-year", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"date":"2024-06-15","weekday":"Monday"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"date":"2024-06-15","weekday":"Monday"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/count-weekday-in-year", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"date": "2024-06-15",
"weekday": "Monday"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.count_weekday_in_year",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |