バッチファイルで指定した日付が月の第何週であるかを取得する(起算曜日指定)
前回、「バッチファイルで指定した日付が月の第何週であるかを取得する」では「日曜起算」で指定した日付が月の第何週であるかを取得するバッチファイルを紹介しましたが、今回は日曜起算以外でも指定した日付が月の第何週であるかを取得するバッチファイルの紹介となります。
コーディング例
@ECHO OFF REM 曜日を取得する年月日(第1引数) SET YMD=20250407 REM 起算曜日(日~土を0~6で設定する) SET /A START_WEEK=6 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 「ツェラーの公式」を使用するにあたり、 REM 1月と2月は前年の13月、14月として扱う IF %MM% LEQ 2 ( SET /A YYYY=%YYYY% - 1 SET /A MM=%MM% + 12 ) REM 「ツェラーの公式」を使用し、日曜~土曜を0~6で取得する SET /A DAYOFWEEK=(%YYYY% + (%YYYY% / 4) - (%YYYY% / 100) + (%YYYY% / 400) + ((13 * %MM% + 8) / 5) + %DD%) %% 7 REM 週末までの加算日数 SET /A ADD_DAYS=(7 - %DAYOFWEEK% + %START_WEEK% - 1) %% 7 ECHO 週末までの加算日数:%ADD_DAYS% REM 週末日付 SET /A WEEKEND_DAY=%DD%+%ADD_DAYS% ECHO 週末日付:%WEEKEND_DAY% REM 月の第何週かを取得 SET /A WEEKNO=((%WEEKEND_DAY% - 1) / 7) ECHO %YMD%は%MM%月の第%WEEKNO%週
実行結果
週末までの加算日数:4 週末日付:11 20250407は4月の第1週
31行目で週末までの日数を計算しています。7行目で起算曜日を土曜としていますので、週末は金曜となります。
35行目で週末の日付を計算しています。
39行目で週末の日付より、指定日が月の第何週であるかを求めます。
演算子「/」は商を求めます。
この式で計算すると以下のようになります。
起算曜日 | 20250407の計算結果 |
---|---|
日曜 | 週末までの加算日数:(7 – 1 + 0 – 1) %% 7 = 5 %% 7 = 5 週末日付:7 + 5 = 12 20250407は4月の第1週((12 – 1) / 7 = 11 / 7 = 1) |
月曜 | 週末までの加算日数:(7 – 1 + 1 – 1) %% 7 = 6 %% 7 = 6 週末日付:7 + 6 = 13 20250407は4月の第1週((13 – 1) / 7 = 12 / 7 = 1) |
火曜 | 週末までの加算日数:(7 – 1 + 2 – 1) %% 7 = 7 %% 7 = 0 週末日付:7 + 0 = 7 20250407は4月の第0週((7 – 1) / 7 = 6 / 7 = 0) |
水曜 | 週末までの加算日数:(7 – 1 + 3 – 1) %% 7 = (8 %% 7) = 1 週末日付:7 + 1 = 8 20250407は4月の第1週((8 – 1) / 7 = 7 / 7 = 1)」 |
木曜 | 週末までの加算日数:(7 – 1 + 4 – 1) %% 7 = (9 %% 7) = 2 週末日付:7 + 2 = 9 20250407は4月の第1週((9 – 1) / 7 = 8 /7 = 1) |
金曜 | 週末までの加算日数:(7 – 1 + 5 – 1) %% 7 = 10 %% 7 = 3 週末日付:7 + 4 = 10 20250407は4月の第1週((10 – 1) / 7 = 9 / 7 = 1) |
土曜 | 週末までの加算日数:(7 – 1 + 6 – 1) %% 7 = 11 %% 7 = 4 週末日付:7 + 4 = 11 20250407は4月の第1週((11 – 1) / 7 = 10 / 7 = 1) |
曜日の算出については「バッチファイルで指定した日付の曜日(数値)を取得する」の記事を参照ください。
以上、バッチファイルで指定した日付が月の第何週であるかを取得する(起算曜日指定)の紹介でした。