Linuxでは、先月は
date -d "last month" '+%Y%m'
または
date -d "1 month ago" '+%Y%m'
しかし、今日は3月31日なので、最初にコマンドを実行すると201603と表示されますが、今何曜日かに関わらず先月取得したいとします。どうすればできますか?
前月の初日/最終日を取得するなどの回避策を使用してそれを達成できますが、エレガントな方法はありますか?
date -d "-$(date +%d) days" '+%Y%m' #get last day of previous month
いつもの知恵は今月の15日使用です。次に、1か月を引きます。
$ nowmonth=$(date +%Y-%m)
$ date -d "$nowmonth-15 last month" '+%Y%m'
201602
GNU date
は、意図したとおりの算術演算には特に適していません。それが私が書いた理由の1つ dateutils
です。
あなたの例は次のように要約されます:
$ dateadd today -1mo -f '%Y%m'
201603
3月31日に正しいことを行います。
$ dateadd 2016-03-31 -1mo -f '%Y%m'
201602
または、今日の日付に関係なく、コメントで示唆すること(前月の最終日を取得):
$ dateround --next today -31d
2016-03-31
$ dateround --next 2016-03-31 -31d
2016-02-29