やりたいこと
bashのdate関数に-dオプションで期間指定をし、
現在から任意の日付を取得したかったが挙動を勘違いしてちょっとはまったのでメモ
環境
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
やったこと
1か月前の日付を取得しようとdateの-dオプションに「"-1 months ago"」を指定していたが
これがマイナスのマイナスでプラスになり1か月未来の日付を取得していた
今回の場合、正しくは「"1 months ago"」とすべきであった
現在の日付
TIME_ZONE='Asia/Tokyo'CURRENT_DATE=$(TZ=${TIME_ZONE}date'+%Y%m%d')# ↓本日の日付echo$CURRENT_DATE
+ echo 20201104
タイムゾーンを東京にしてdateを取得した結果、投稿日の2020/11/04
となる
-d を正の値(1 months ago)で指定
PLUS_DATE=$(TZ=${TIME_ZONE}date'+%Y%m%d'-d"1 months ago")# ↓指定した期間より前の日付echo$PLUS_DATE
+ echo 20201004
単純に1か月前の2020/10/04
となっている
-d を負の値("-1" months ago)で指定
MINUS_DATE=$(TZ=${TIME_ZONE}date'+%Y%m%d'-d"-1 months ago")# ↓指定した期間より後の日付echo$MINUS_DATE
+ echo 20201204
-dにマイナスの値を渡すと-1か月前となり「負×負=正」なので1か月後の2020/12/04
となった