そこで、SAP/ABAPでの日付計算の処理方法についてまとめてみました!
日付の計算について
SAPの日付型は実は文字型(CHAR8桁)ですが、DAT型同士であれば正しく差を求めることができます。例:
DATA: W_DATUM1 TYPE DATUM,
W_DATUM2 TYPE DATUM,
W_CHAR(2) TYPE C.
* 日付をセット
W_DATUM1 = '20180517'.
W_DATUM2 = '20180520'.
* 日付差違計算
W_CHAR = W_DATUM2 - W_DATUM1.
月初日取得方法
これはとても簡単です。文字型であることを活かし、後ろ2桁を01にすることで実現可能です。
例:
DATA: W_DATUM1 TYPE DATUM,
W_DATUM2 TYPE DATUM.
* 本日日付取得
W_DATUM1 = SY-DATUM.
* 月初日取得(現在日付の前6桁と、後ろに01をつける)
CONCATENATE W_DATUM+0(6) '01' INTO W_DATUM2.
月末日取得
月末日は月によってことなるため、単純に'31'をセットはできないため、汎用モジュールを使用する流れとなります。例:
DATA: W_DATUM_FIRST TYPE DATUM, "月初日
W_DATUM_LAST TYPE DATUM. "月末日
CALL FUNCTION 'HR_JP_MONTH_BEGIN_END_DATE'
EXPORTING
IV_DATE = SY-DATUM "実行日
IMPORTING
EV_MONTH_BEGIN_DATE = W_DATUM_FIRST
EV_MONTH_END_DATE = W_DATUM_LAST.
~月前の月初、月末日取得ロジック例
W_MONTHで、何月前かを算出した後、月初・月末日を取得するロジックとなっています。W_MONTHは「-1」なども可能であるため、1月前の月末月初日の取得も可能です。DATA: W_DATUM_FIRST TYPE DATUM, "月初日
W_DATUM_LAST TYPE DATUM, "月末日
W_MONTH TYPE I, "月数
W_NEWDATE TYPE DATUM. "
* ~月前・~月後の月初・月末日取得
CALL FUNCTION 'MONTH_PLUS_DETERMINE'
EXPORTING
MONTHS = W_MONTH
OLDDATE = SY-DATUM
IMPORTING
NEWDATE = W_NEWDATE.
* 月初日・月末日取得
CALL FUNCTION 'HR_JP_MONTH_BEGIN_END_DATE'
EXPORTING
IV_DATE = W_NEWDATE "実行日
IMPORTING
EV_MONTH_BEGIN_DATE = W_DATUM_FIRST
EV_MONTH_END_DATE = W_DATUM_LAST.
「~月前の月初、月末日取得ロジック例」ですが、nヶ月前あるいは、nヶ月後の日付を汎用モジュール「MONTH_PLUS_DETERMINE」で取得して、該当月の初日、もしくは末日を既にご紹介されている方法で取得すれば実現できそうですね。
返信削除その方法でできそうですね!
削除このジャンルの記事更新が疎かになっていたのですが、これは更新しなくては!となりました。
コメント非常にありがたいです。
前月初日取得の記事待ってます!
返信削除見られていない記事とおもってました!本当に「今週中に更新します!」
返信削除