月の第n曜日
2024年3月の第3月曜日は18日、2024年2月の最終金曜日は23日です。年、月、曜日、第1から第5または最終を選ぶと、移動祝日や毎月の会議の日付が分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 年
- 2,024
- 月
- 3
- 対象の曜日
- monday
- 序数
- 3
- 曜日インデックス
- 1
- 序数インデックス
- 3
- 日
- 18
- 日付
- 2024-03-18
会議のスケジュール、給与計算カレンダー、祝日、定期的な社交イベントは、固定の日付番号ではなく「第2火曜日」や「最終金曜日」として定義されることがよくあります。そのような人間的なルールを具体的なグレゴリオ暦の日付に変換するには、どの曜日がその月に含まれるか、うるう年で2月がどう伸びるか、第5の出現が月末までに実際に収まるかを知る必要があります。この計算ツールは、年、1から12までの月、曜日名またはゼロ始まりのインデックス、第1から第5までまたはlastの序数を受け取り、その出現の民用ISO日付を返します。要求された枠が存在しない場合、たとえば月曜日が4回しかない月の第5月曜日の場合は、翌月の日付を捏造するのではなく、明確な検証エラーで失敗します。
時計なしで月の第n曜日を解決する仕組み
4つの意図の要素から始めます。実用範囲1から9999までのグレゴリオ暦の年、1月を1、12月を12とする月、対象の曜日、そして第1・第2・第3・第4・第5またはlastを意味する序数です。2月のうるう年規則を標準的なグレゴリオ暦の判定で確認します。
4で割り切れる年はうるう年ですが、100で割り切れる年は400でも割り切れる場合に限りうるう年です。これにより2月が28日か29日かが決まり、各曜日が何回出現できるかが決まります。次に、Sakamotoの閉形式メソッドで月の1日の曜日を計算します。
この方法は整数除算と固定の12エントリーの月テーブルのみを使用し、ホストの時計もJavaScriptのDateオブジェクトも使わないため、タイムゾーンや夏時間テーブルで答えがずれることはありません。その1日の曜日から、最初に一致する曜日の日付番号は、対象曜日への剰余距離に1を足したものです。それ以降の出現はすべて暦の7日後です。
出現回数は、月の長さを超えずに7を足せる回数です。lastの場合、nは全出現回数に設定され、その月で最後に一致する日が返されます。結果は4-2-2形式のISO文字列としてフォーマットされます。
第n曜日カレンダーが実務で登場する場面
感謝祭(11月の第4木曜日)や労働者の日(9月の第1月曜日)のようなアメリカ式の祝日は、固定の日付番号ではなく曜日の序数で定義されるため、給与計算や学校のカレンダーは毎年それらを解決する必要があります。企業の全体会議は各月の第2火曜日に設定されることが多く、製品リリーストレインは最終金曜日に出荷されることがあります。
銀行・決済システムは、うるう年や世紀の境界を越えて安定していなければならない月内曜日ルールとして定期的な締め日を符号化しています。データエンジニアは、純粋関数の経路に完全なiCalendarライブラリを持ち込まずに、分析用の祝日・会議日のディメンションテーブルを具体化します。
後で日付に任意の暦日数を加算したり、年内日序数を計算したり、日付がどの四半期に入るかを調べたり、逆に指定した日付が何回目の出現かを尋ねたりする必要が生じた場合は、この「月の第n曜日」ページに過負荷をかけず、それらを別の検索意図とランディングとして扱ってください。
活用例
曜日の序数で定義される祝日
感謝祭、労働者の日、記念日などのルールを、テーブルをハードコードせずに任意の年の具体的なISO日付へ解決します。
定期的なチーム会議とリリースサイクル
「第2火曜日」や「月の最終金曜日」といったポリシーを、招待状、CIフリーズ、ステータスレポート用の暦日に変換します。
給与計算・決済の締め日
うるう年に安全なグレゴリオ暦の計算と、第5の出現がない場合の明確なエラーで、金融パイプライン向けの月内曜日締め日を具体化します。
よくある質問
月の第n曜日とはどういう意味ですか?
指定した暦月内で、指定された曜日の第1、第2、第3、第4、第5または最後の出現の日付を意味します。たとえば2024年3月の第3月曜日は2024-03-18です。
第5の出現が存在しない場合はどうなりますか?
エラーには、その曜日がその月に実際に何回出現するかが示されます。
うるう年に対応していますか?
はい。 グレゴリオ暦のうるう年規則が適用されるため、2月は29日になることがあり、一部の曜日が5回含まれる場合があります。JavaScriptのDateオブジェクトは使用していません。
料金はいくらですか?
ブラウザーのツールは無料でローカルに動作します。無効な入力は課金されません。
月の最終金曜日はどう求めますか?
年、月、金曜日を選び、順番に「最終」を指定します。その月に金曜日が4回でも5回でも最後の金曜日が返り、2024年2月なら23日になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/date/nth-weekday-of-month \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2024,"month":3,"weekday":"monday","ordinal":"3"}'const res = await fetch("https://api.kit.forhosting.com/date/nth-weekday-of-month", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"year": 2024,
"month": 3,
"weekday": "monday",
"ordinal": "3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/nth-weekday-of-month",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"year": 2024,
"month": 3,
"weekday": "monday",
"ordinal": "3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/nth-weekday-of-month", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"year":2024,"month":3,"weekday":"monday","ordinal":"3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"year":2024,"month":3,"weekday":"monday","ordinal":"3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/nth-weekday-of-month", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"year": 2024,
"month": 3,
"weekday": "monday",
"ordinal": "3"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.nth_weekday_of_month",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
時計なしで月の第n曜日を解決する仕組み
数値の序数nの場合、日付は最初の出現にn-1×7を足したもので、nが出現回数を超えるとリクエストは拒否されます。
送信するものと返ってくるもの
古典的な確認例として、2024年3月の第3月曜日は18日、2024年2月の最終金曜日は23日、2024年2月の第5木曜日は、そのうるう年の2月に木曜日が5回あるため29日になります。宿題や簡単な妥当性チェックには無料のブラウザーフォームを使い、祝日カレンダーの一括作成や回帰フィクスチャが必要な場合はスクリプトから同一の契約を呼び出してください。4つの必須フィールドを送信します。有限の整数の年であるyear、1から12までの整数のmonth、mondayのような英語名または日曜日を0とする0から6の整数のweekday、1から5、firstからfifthの単語、または文字列last(-1も可)のordinalです。フィールドの欠落、整数でない年や月、不明な曜日トークン、last以外で1から5の範囲外の序数、その月に存在しない出現の要求は、すべてinvalid_inputで失敗し、課金されません。成功時のレスポンスには、year、month、正規化された曜日名とweekday_index、数値または文字列lastのordinal、解決された1始まりの出現番号であるordinal_index、月内日、ISO日付文字列、その曜日が月内に何回出現するかのoccurrence_count、その年のis_leap_year、days_in_month、うるう年規則とSakamoto規則を記録した短いformula文字列が含まれます。成功したAPI呼び出しの料金は公開されている基本額の1件あたり$0.002で、検証失敗ではプリペイド残高は消費されません。
第n曜日カレンダーが実務で登場する場面
この機能は純粋なparseエンジンなので、API料金は公開されている基本額の成功1件あたり$0.002で、検証失敗では残高は消費されません。
技術的な質問
月の最終金曜日はどうやって要求しますか?
weekdayをfriday(または5)に、ordinalをlast(または-1)に設定してください。レスポンスの日付は、その月内に収まる最後の金曜日です。