UNIX で日付または少なくとも 30 日から 1 か月を減算する方法はありますか。
例:
[yyy-mm-dd] - 30 日
2011-07-23 - 30 日
ちなみに、日付はユーザー入力に応じて任意の日付にすることができます。
ありがとう。
簡単でポータブルな方法はありません。これまでのところ、他のすべての回答は 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
)
これを試して
date -d "30 days ago" "+%Y%m%d00"
#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