67

Ubuntu以下を使用して、 11.04の下で前月、現在、および翌月を取得しています。

LAST_MONTH=`date +'%m' -d 'last month'`
NEXT_MONTH=`date +'%m' -d 'next month'`
THIS_MONTH=`date +'%m' -d 'now'`

2012年10月末日、本日まで元気に営業中 (2012-10-31)

私は今のところ以下の結果を得ています:

$ date
Wed Oct 31 15:35:26 PDT 2012
$ date +'%m' -d 'last month'
10
$ date +'%m' -d 'now'
10
$ $ date +'%m' -d 'next month'
12

出力はそれぞれ910、 であると思い11ます。

date出力がこのように動作する理由がわかりません。previous一貫性を保ち、代わりcurrentnext月を取得するための良い方法は何ですか?

4

5 に答える 5

124

問題はdate、リクエストを文字通り受け取り、9月31日(10月31日から1か月を引いたもの)の日付を使用しようとし、それが存在しないため、次の日に移動することです。(からの)dateドキュメントinfo dateには、次のアドバイスがあります。

ユニットのファズは、相対的なアイテムに問題を引き起こす可能性があります。たとえば、2003-06-31は無効な日付であるため、「2003-07-31-1month」は2003-07-01と評価される場合があります。前月をより確実に判断するために、当月の15日の前の月を要求できます。例えば:

 $ date -R
 Thu, 31 Jul 2003 13:02:39 -0700
 $ date --date='-1 month' +'Last month was %B?'
 Last month was July?
 $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
 Last month was June!
于 2012-10-31T22:56:19.647 に答える
3

主な問題は、 date --date オプションが利用できず、インストールする権限がない場合に発生します。次に、以下を試してください-

Previous month
#cal -3|awk 'NR==1{print toupper(substr($1,1,3))"-"$2}'
DEC-2016 
Current month
#cal -3|awk 'NR==1{print toupper(substr($3,1,3))"-"$4}'
JAN-2017
Next month
#cal -3|awk 'NR==1{print toupper(substr($5,1,3))"-"$6}'
FEB-2017
于 2017-01-28T07:50:04.110 に答える