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 gap gap=${1:--6} set -- $( eval printf %04d%02d $( date +'$(((%Y*12+%m-1+${gap})/ 12)) $(((%Y*12+%m-1+${gap})%%12+1))' ) ) target_date=${1}