バッチファイルで指定した日付が月の第何週であるかを取得する(起算曜日指定)

バッチファイルバッチ

記事内に広告が含まれています。

前回、「バッチファイルで指定した日付が月の第何週であるかを取得する」では「日曜起算」で指定した日付が月の第何週であるかを取得するバッチファイルを紹介しましたが、今回は日曜起算以外でも指定した日付が月の第何週であるかを取得するバッチファイルの紹介となります。

コーディング例

@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)

曜日の算出については「バッチファイルで指定した日付の曜日(数値)を取得する」の記事を参照ください。

以上、バッチファイルで指定した日付が月の第何週であるかを取得する(起算曜日指定)の紹介でした。

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ