date -d
シェルスクリプトで「1日前」や「1ヶ月後」のような相対的な日付を計算したい場合がある。
dateコマンドに-dオプションで日付文字列を指定すると、相対的な日付を計算できる。
$ date
2026年 7月 12日 日曜日 17:42:19 JST
$ date -d '1 day ago'
2026年 7月 11日 土曜日 17:42:19 JST
$ date -d 'tomorrow'
2026年 7月 13日 月曜日 17:42:19 JST
$ date -d '3 days'
2026年 7月 15日 水曜日 17:42:19 JST
$ date -d '1 week ago'
2026年 7月 5日 日曜日 17:42:19 JST
$ date -d '1 month ago'
2026年 6月 12日 金曜日 17:42:19 JST
$ date -d '1 year ago'
2025年 7月 12日 土曜日 17:42:19 JST
起点となる日付を指定する
日付文字列の先頭に基準日を指定すると、現在時刻ではなくその日付を起点に計算できる。
$ date -d '2025-05-28 + 10 days' +'%Y-%m-%d'
2025-06-07
$ date -d '2025-05-28 - 1 month' +'%Y-%m-%d'
2025-04-28
$ date -d '2025-05-28 3 days ago' +'%Y-%m-%d'
2025-05-25
曜日を指定する
nextやlastと曜日を組み合わせると、直近の該当曜日を計算できる。
$ date -d 'next monday' +'%Y-%m-%d'
2026-07-13
$ date -d 'last friday' +'%Y-%m-%d'
2026-07-10
シェルスクリプトでの活用例
コマンド置換と組み合わせると、変数の日付を起点に計算できる。
$ target_date=$(date '+%Y-%m-%d')
$ date -d "$target_date + 7 days" +'%Y-%m-%d'
2026-07-19
ログファイルの世代管理やバッチ処理の対象期間の算出など、日付を起点にした計算が必要な場面で活用できる。
macOSでの注意点
-dオプションはGNU coreutils版のdateコマンドに固有のオプションである。macOS標準のdateコマンド(BSD date)には存在せず、そのままでは動作しない。
macOSで同様に相対的な日付を計算するには、Homebrewでcoreutilsをインストールしgdateコマンドを使用する。
$ brew install coreutils
$ gdate -d 'tomorrow'
\第一線のプログラマーの行動原理を学べる!/
