ABAPで指定日が何曜日かを求めたいときは、汎用モジュール DAY_IN_WEEK を使えます。日付を渡すと月曜=1から日曜=7までの番号が返るため、帳票への曜日表示や曜日別の処理に利用できます。
DAY_IN_WEEKの入力と戻り値
入力パラメータ DATUM には日付型(TYPE d)の値を渡します。戻り値 WOTNR は曜日を表す数値です。
- 1:月曜日
- 2:火曜日
- 3:水曜日
- 4:木曜日
- 5:金曜日
- 6:土曜日
- 7:日曜日
日曜日が0ではなく7である点に注意してください。たとえば2026年10月13日を渡すと、火曜日を表す 2 が返ります。
ABAPの呼び出し例:曜日名まで表示する
次のレポートは入力日付を確認してから DAY_IN_WEEK を呼び出し、番号を日本語の曜日に変換します。固定値を sy-datum に替えれば、実行日の曜日を取得できます。
REPORT zday_in_week_sample.
DATA lv_date TYPE d VALUE '20261013'.
DATA lv_wotnr TYPE p.
DATA lv_weekday TYPE c LENGTH 1.
START-OF-SELECTION.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
date = lv_date
EXCEPTIONS
plausibility_check_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE: / '日付が不正です。'.
RETURN.
ENDIF.
CALL FUNCTION 'DAY_IN_WEEK'
EXPORTING
datum = lv_date
IMPORTING
wotnr = lv_wotnr.
CASE lv_wotnr.
WHEN 1. lv_weekday = '月'.
WHEN 2. lv_weekday = '火'.
WHEN 3. lv_weekday = '水'.
WHEN 4. lv_weekday = '木'.
WHEN 5. lv_weekday = '金'.
WHEN 6. lv_weekday = '土'.
WHEN 7. lv_weekday = '日'.
ENDCASE.
WRITE: / lv_date, 'は', lv_weekday, '曜日です。'.
この例では2026年10月13日が火曜日なので、lv_wotnr は 2 になります。帳票に「火曜日」と表示したい場合は、例のように番号から表示文字列への変換を追加します。DAY_IN_WEEK 自体が日本語の曜日名を返すわけではありません。
入力日付と営業日の判定で気をつけること
- 外部ファイルなどから受け取った日付は、曜日計算の前に妥当性を確認します。例では
DATE_CHECK_PLAUSIBILITYを使い、2026年2月30日のような不正日付を除外しています。 DAY_IN_WEEKの戻り値から土日かどうかは分かりますが、祝日や会社固有の休日までは判定できません。営業日・稼働日の判定には、対象のファクトリカレンダを使う処理が別途必要です。- タイムスタンプを扱う場合は、まず対象のタイムゾーンで日付を確定してから曜日を求めます。日付の境界付近では、タイムゾーンによって曜日が変わるためです。
まとめ
DAY_IN_WEEK は日付から曜日番号を求めるシンプルな汎用モジュールです。DATUM に日付を渡し、WOTNR の1~7を必要な曜日表示に変換します。外部入力の妥当性確認と、祝日を含む営業日判定は用途に応じて別途行ってください。
参考・関連記事
- 日付の妥当性をチェックする汎用モジュール:DATE_CHECK_PLAUSIBILITY — 外部入力の日付を扱うときに確認したい内容です。
- 指定日の月初日・月末日を取得する汎用モジュール:HR_JP_MONTH_BEGIN_END_DATE — 日付を使った月次処理と合わせて役立ちます。
- 汎用モジュール一覧 — 日付操作を含む関連記事を探せます。