Macのdateコマンドで1日後の日付を取得する

こんにちは、さるまりんです。

シェルスクリプトで次の日の日付を取るときにはこんなふうにしていました。

現在日時から次の日

date -d "1day" "+%Y%m%d"
20201124

指定日(2020年12月31日)から次の日

date -d "20201231 1day" "+%Y%m%d"
20210101

これ、Macで動かないんです。

Macのdateコマンドには-d(--date)オプションがないのでエラーとなってしまいます。

date -d "1day" "+%Y%m%d"
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

Macでは次のようにして次の日の日付を取得することができます。

現在日時から次の日

date -j -v+1d +"%Y%m%d"
20201124

指定日(2020年12月31日)から次の日

date -j -v+1d -f "%Y%m%d" "20201231" +"%Y%m%d"
20210101

-vオプションが日付を調整するオプションです。+1dで1日後、-1dだと1日前です。d(日)以外にもy(年)m(月)w(週)H(時)M(分)S(秒)が利用できます。

-fオプションは指定のフォーマット(書式)で日時を受け取るために指定します。上の例ではフォーマットは"%Y%m%d"です。

-jオプションはシステム日付を変更せずに日時を出力するオプションです。

-dオプションがないことを知らずそのまま実行しようとしてハマったのでメモを残しておきます。

読んでくださってありがとうございました。

それではまた!