前月を知る - sh編

shっていうかdateコマンドですけど。

安直に「1 month ago」でいいじゃん!と思った人は負けです(ぼくもですけど><)。

これはいいんだけど、
$ date '+%Y-%m-%d %T.%N'; date '+%Y-%m-%d %T.%N' -d '1 month ago'
2010-09-16 18:05:00.342008278
2010-08-16 18:05:00.344293593

このケースだと前月になってない
# date 053100002010 >/dev/null; date '+%Y-%m-%d %T.%N'; date '+%Y-%m-%d %T.%N' -d '1 month ago'
2010-05-31 00:00:00.000000000
2010-05-01 00:00:00.004000016
set $(date '+%Y %m')
y=$1
m=$((${2#0}-1))
mが0だったらyから1引いて...

とかやるのはめんどいなーと思ったら、info にちゃんと書いてありました><

# date 053100002010 >/dev/null; date '+%Y-%m-%d %T.%N'; date '+%Y-%m' -d "$(date '+%Y-%m-15') -1 month"
2010-05-31 00:00:00.000000000
2010-04

なるほど!!!