web-dev-qa-db-ja.com

日に関係なく前月を取得

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
4
hades

いつもの知恵は今月の15日使用です。次に、1か月を引きます。

$ nowmonth=$(date +%Y-%m)
$ date -d "$nowmonth-15 last month" '+%Y%m'
201602
10
user79743

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
1
hroptatyr