date コマンドで前月を取得する

dateコマンドで前月の日付を取得するには「1 month ago」のオプションを付けると一ヶ月前の値を取得ることが出来ます。

$ date +'%Y-%m-%d'
2020-11-04
$ date -d '1 month ago' +'%Y-%m-%d'
2020-10-04

但し、こちらは一ヶ月が31日ある月だと、一ヶ月前は前月にならずにばらつきがあります。
3月31日の場合は、3月3日、7月31日の場合は、7月31日、12月31日の場合は、12月1日となり前月になりません。
一ヶ月が30日の場合は、前月表示になるので問題ありません。

# 一ヶ月が31日の場合
$ date -d '2019/03/31 1 month ago' +'%Y-%m-%d'
2019-03-03 
$ date -d '2019/08/31 1 month ago' +'%Y-%m-%d'
2019-07-31
$ date -d '2019/12/31 1 month ago' +'%Y-%m-%d'
2019-12-01
# 一ヶ月が30日の場合
$ date -d '2019/09/30 1 month ago' +'%Y-%m-%d'
2019-08-30
$ date -d '2019/11/30 1 month ago' +'%Y-%m-%d'
2019-10-30

31日ある場合は、異なった前月になるので、前月を求める場合は月初めから1日引いた方が無難です。シェルスクリプトで書くと以下のようになります

#!/bin/bash

DATE=2019/03/31
echo $DATE

MON1=`date -d $DATE +'%Y-%m-01'`
echo "Beginning of the month: $MON1"
MON2=`date -d "${MON1} 1 day ago" +'%Y-%m-%d'`
echo "at the end of the last month: $MON2"

シェルスクリプトを実行すると、以下のように前月の末日が表示されます

$ sh test.sh 
2019/03/31
Beginning of the month: 2019-03-01
at the end of the last month: 2019-02-28

 

 

 

スポンサーリンク