Quantcast
Channel: mattintosh note
Viewing all articles
Browse latest Browse all 891

date コマンドで「○ヶ月前」

$
0
0

1 month agoとか使えない dateコマンドで「○ヶ月前」ってどうやって出すのかな…と。

例えば6ヶ月前の場合。(引数がなければ ${gap}-6

自分なりに考えてみたものだと JavaScript.getMonth()のように1〜12月を0〜11に変換してそれを戻すっていう感じになったんだけど他にいい方法あるのかしら?

gap=${1:--6}set -- $(($(date +%Y) * 12 + $(date +%m) - 1))set -- $(printf'%04d%02d'$(((${1} + ${gap}) / 12)) \$(((${1} + ${gap}) % 12 + 1)))target_date=${1}

追記

dateコマンドに予め演算子と算術式用の $(())を入れておいて evalで展開すれば dateコマンドは1回で済む。

typeset-i gapgap=${1:--6}set -- $(evalprintf %04d%02d $(    date +'$(((%Y*12+%m-1+${gap})/ 12))            $(((%Y*12+%m-1+${gap})%%12+1))'))target_date=${1}

Viewing all articles
Browse latest Browse all 891

Trending Articles