2つの年月日から経過日数を表示する Bash スクリプト (Mac・Windows 両対応)

2つの年月日から経過日数を表示する Bash スクリプトを作った。MacOS・Windows GitBash の両対応。

#!/bin/bash

# 'YYYY-MM-DD' 形式で2つの年月日を指定させる
date_1="$1"
date_2="$2"

if [ -z "$date_1" -o -z "$date_2" ]; then
  echo '日付を指定してください'
  exit 1
fi

# 'YYYY-MM-DD' 形式からシリアル値に変換する (日付の形式チェックをしていない)
if [ "$(uname)" == "Darwin" ]; then
  # Mac
  date_1_serial=`date -j -f "%Y-%m-%d" "$date_1" "+%s"`
  date_2_serial=`date -j -f "%Y-%m-%d" "$date_2" "+%s"`
else
  # Windows GitBash・GNU Linux
  date_1_serial=`date -d "$date_1" +%s`
  date_2_serial=`date -d "$date_2" +%s`
fi

# シリアル値がより大きい方から除算する
if [ "$date_1_serial" -gt "$date_2_serial" ]; then
  diff_days=$(( ($date_1_serial - $date_2_serial) / 60 / 60 / 24 ))
else
  diff_days=$(( ($date_2_serial - $date_1_serial) / 60 / 60 / 24 ))
fi

# 経過日数を表示する
if [ "$diff_days" == "1" ]; then
  echo "$diff_days Day"
else
  echo "$diff_days Days"
fi

コレを date-diff みたいな名前で PATH の通っているところに保存して実行権を設定する。あとは以下のように叩く。

$ date-diff 2019-01-01 2018-01-01
365 Days

$ date-diff 2019-01-01 2019-02-01
31 Days

2つの引数は YYYY-MM-DD 形式のみ正常に処理できる。第1引数と第2引数のどちらが新しくても古くても大丈夫。