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

バッチファイルバッチ

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

バッチファイルで指定した日付が月の第何週(日曜起点)であるかを取得する方法について紹介します。

コーディング例

@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

曜日の算出については「バッチファイルで指定した日付の曜日(数値)を取得する」の記事を参照ください。
以上、バッチファイルで指定した日付が月の第何週であるかを取得するの紹介でした。

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

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

お問合せ