3

UNIX で日付または少なくとも 30 日から 1 か月を減算する方法はありますか。

例:

[yyy-mm-dd] - 30 日

2011-07-23 - 30 日

ちなみに、日付はユーザー入力に応じて任意の日付にすることができます。

ありがとう。

4

4 に答える 4

4

簡単でポータブルな方法はありません。これまでのところ、他のすべての回答は Gnu 固有の拡張機能を使用しています。

これはどの Unix でも動作するはずです:

date "+%Y %-m %-d" |
(
  read y m d
  m=$(($m - 1))
  [ $m = 0 ] && { m=12; y=$(($y - 1)); }
  [ $d = 31 -a \( $m = 4 -o $m = 6 -o $m = 9 -o $m = 11 \) ] && d=30
  [ $d -gt 28 -a $m = 2 ] && d=28
  printf "%04d:%02d:%02d\n" $y $m $d
)
于 2013-10-04T08:30:24.477 に答える
2

これを試して

date -d "30 days ago" "+%Y%m%d00"

于 2013-10-04T03:48:12.133 に答える
0
#Current Date
 date +'%Y:%m:%d'
 2013:10:04

#Date a month ago
 date --date='-1 month' +'%Y:%m:%d. Last month was %B.'
 2013:09:04. Last month was September.
#%B prints out locale's full month name. 

ターミナルで「info coreutils date invocation」と入力して、詳細を確認してください。セクション: 28.7 日付文字列の相対項目。ファイル: coreutils.info

EDIT:OPは日付のユーザー入力を望んでいるようです。

#Nov 1 2012 can be  modified to suit user's input. 
 date --date="$(date -d "Nov 1 2012")-1 month" +'%Y:%m:%d'
 2012:10:01
于 2013-10-04T07:48:22.577 に答える