hogehoge foobar Blog Style Beta

Web,Mac,Linux,JavaScript,Perl,PHP,RegExp,Git,Vim,Redmineなど技術的なことのメモや、ちょっと便利そうなものの紹介をしています。

dateコマンドで○日前の日付を取得する

久しぶりに仕事でbashを書きました。
『date』コマンドで○日前/○日後の日付を取得する方法で、
少しだけハマッたので、覚書として書いておきます。

Linux系の場合
オプション"--date"で"○ day(s)"(○日前の場合は"ago"を付ける)を指定する。

$ date +"%Y%m%d"
20090609

$ date +"%Y%m%d" --date "1 day"
20090610

$ date +"%Y%m%d" --date "7 days"
20090616

$ date +"%Y%m%d" --date "1 day ago"
20090608

$ date +"%Y%m%d" --date "7 days ago"
20090602


BSD系の場合
オプション"-v"で"+○d"(○日前の場合は"-")を指定する。
$ date +"%Y%m%d"
20090609

$ date +"%Y%m%d" -v+1d
20090610

$ date +"%Y%m%d" -v+7d
20090616

$ date +"%Y%m%d" -v-1d
20090608

$ date +"%Y%m%d" -v-7d
20090602


古いUNIX系の場合
一時的にタイムゾーンを設定して対応する。
※日本時間は世界標準時間 GMT (≒UTC) より9時間早いので、
 1日前 (24時間前)なら -9+24=15 をタイムゾーンに設定
 1日後 (24時間後)なら -9-24=-33 をタイムゾーンに設定
$ date +"%Y%m%d"
20090609

$ env TZ=JST-33 date +%Y%m%d
20090610

$ env TZ=JST-153 date +%Y%m%d
20090615

$ env TZ=JST+15 date +%Y%m%d
20090608

$ env TZ=JST+159 date +%Y%m%d
20090602


お仕事サーバーは古いUNIXだったので、残念ながら一番下の書き方で実現しました。