Linuxコマンド: date で◯か月前 / ◯か月後を取得するときの注意
date コマンドは、日付を取得したり、整形して表示したり、◯日後や◯か月後、◯年前の日付を表示したりすることができます。
◯か月前や◯か月後を使用する時が曲者で、月末に近い日に実行すると、思っていた動作をしてくれないことがあります。
$ date 2015年 9月 6日 日曜日 16:05:22 JST $ date -d "2015-08-31" 2015年 8月 31日 月曜日 00:00:00 JST $ date -d "2015-08-31 1 month" 2015年 10月 1日 木曜日 00:00:00 JST $ date -d "2015-01-31 1 month" 2015年 3月 3日 火曜日 00:00:00 JST
8月31日の1か月後が10月1日になったり、1月31日の1か月後が3月3日になったりします。月によって◯か月後の計算をきちんとしてくれるわけではないようです。
実施日の翌月末を取得するには、実施月の 1日に変換してから、2ヶ月後の1日前を指定することで取得できます。
$ date -d "`date '+%Y/%m/01' -d "\`date '+%Y/%m/01' \` 2 month"` 1 day ago" 2015年 10月 31日 土曜日 00:00:00 JST
指定した日付の翌月の月末を取得する場合は、以下のように書きます。
$ date -d "`date '+%Y/%m/01' -d "\`date '+%Y/%m/01' -d 2015/08/31\` 2 month"` 1 day ago" 2015年 8月 31日 月曜日 00:00:00 JST $ date -d "`date '+%Y/%m/01' -d "\`date '+%Y/%m/01' -d 2015/01/31\` 2 month"` 1 day ago" 2015年 2月 28日 土曜日 00:00:00 JST
指定した日付の前月の月末、前々月の月末は、以下のように書きます。0 month ago はなくてもいいです。
$ date -d "`date '+%Y/%m/01' -d "\`date '+%Y/%m/01' -d 2015/01/31\` 0 month ago"` 1 day ago" 2014年 12月 31日 水曜日 00:00:00 JST $ date -d "`date '+%Y/%m/01' -d "\`date '+%Y/%m/01' -d 2015/01/31\` 1 month ago"` 1 day ago" 2014年 11月 30日 日曜日 00:00:00 JST
コメント
コメントを投稿