バッチファイルで指定した日付が月の第何週であるかを取得する
バッチファイルで指定した日付が月の第何週(日曜起点)であるかを取得する方法について紹介します。
コーディング例
@ECHO OFF REM 月の第何週かを取得する年月日(YYYYMMDD) SET YMD=20241208 REM 西暦の年を取得 SET /A YYYY=%YMD:~0,4% * 1 REM 月を取得 SET /A MM=1%YMD:~4,2% * 1 SET /A MM=%MM% - 100 REM 日を取得 SET /A DD=1%YMD:~6,2% * 1 SET /A DD=%DD% - 100 REM 「ツェラーの公式」を使用し、日曜~土曜を0~6の数値で取得する IF %MM% LEQ 2 ( SET /A YYYY=%YYYY% - 1 SET /A MM=%MM% + 12 ) SET /A DAYOFWEEK=(%YYYY% + (%YYYY% / 4) - (%YYYY% / 100) + (%YYYY% / 400) + ((13 * %MM% + 8) / 5) + %DD%) %% 7 REM 月の第何週かを取得する SET /A WEEKNO=((%DD% - %DAYOFWEEK% + 5) / 7) + 1 ECHO %YMD%は%MM%月の第%WEEKNO%週
実行結果
20241208は12月の第2週
25行目で日にちと曜日を基に、指定日が月の第何週(0~5)かを算出しています。
演算子「/」は商を求めます。
この式で計算すると以下のようになります。
月初の曜日 | 計算例 |
---|---|
日曜 |
1日(日):((1 – 0 + 5) / 7) + 1 = (6 / 7) + 1 = 0 + 1 = 1 7日(土):((7 – 6 + 5) / 7) + 1 = (6 / 7) + 1 = 0 + 1 = 1 8日(日):((8 – 0 + 5) / 7) + 1 = (13 / 7) + 1 = 1 + 1 = 2 |
月曜 |
1日(月):((1 – 1 + 5) / 7) + 1 = (5 / 7) + 1 = 0 + 1 = 1 6日(土):((6 – 6 + 5) / 7) + 1 = (5 / 7) + 1 = 0 + 1 = 1 7日(日):((7 – 0 + 5) / 7) + 1 = (12 / 7) + 1 = 1 + 1 = 2 |
火曜 |
1日(火):((1 – 2 + 5) / 7) + 1 = (4 / 7) + 1 = 0 + 1 = 1 5日(土):((5 – 6 + 5) / 7) + 1 = (4 / 7) + 1 = 0 + 1 = 1 6日(日):((6 – 0 + 5) / 7) + 1 = (11 / 7) + 1 = 1 + 1 = 2 |
水曜 |
1日(水):((1 – 3 + 5) / 7) + 1 = (3 / 7) + 1 = 0 + 1 = 1 4日(土):((4 – 6 + 5) / 7) + 1 = (3 / 7) + 1 = 0 + 1 = 1 5日(日):((5 – 0 + 5) / 7) + 1 = (10 / 7) + 1 = 1 + 1 = 2 |
木曜 |
1日(木):((1 – 4 + 5) / 7) + 1 = (2 / 7) + 1 = 0 + 1 = 1 3日(土):((3 – 6 + 5) / 7) + 1 = (2 / 7) + 1 = 0 + 1 = 1 4日(日):((4 – 0 + 5) / 7) + 1 = (9 / 7) + 1 = 1 + 1 = 2 |
金曜 |
1日(金):((1 – 5 + 5) / 7) + 1 = (1 / 7) + 1 = 0 + 1 = 1 2日(土):((2 – 6 + 5) / 7) + 1 = (1 / 7) + 1 = 0 + 1 = 1 3日(日):((3 – 0 + 5) / 7) + 1 = (8 / 7) + 1 = 1 + 1 = 2 |
土曜 |
1日(土):((1 – 6 + 5) / 7) + 1 = (0 / 7) + 1 = 0 + 1 = 1 2日(日):((2 – 0 + 5) / 7) + 1 = (7 / 7) + 1 = 1 + 1 = 2 |
曜日の算出については「バッチファイルで指定した日付の曜日(数値)を取得する」の記事を参照ください。
以上、バッチファイルで指定した日付が月の第何週であるかを取得するの紹介でした。