dateコマンドとexprコマンドを使用することにより、日付と日付の引き算をすることができます。
つまり、指定した2つの日付から間の日数を計算することができます。
以下に日付と日付の引き算の仕方を記します。
本コマンドの動作確認はCentOSで行いました。
dateコマンドの-dと%sを使用して1970/01/01からの経過秒数を取得しexprにより引き算および一日の秒数(60*60*24=86400秒)で割ることにより経過日数を算出しています。
$ man date
<snip>
%s 1970-01-01 00:00:00 UTC からの秒数 (標準外の拡張)
<snip>
-d datestr, --date datestr
現 在の時刻・日付の代わりに、 datestr で指定された時刻・日付を表
示する。 datestr は普通のフォーマットならだいたいなんでも使う こ
とができる。月名、タイムゾーン、‘am’ や ‘pm’ なども用いてよい。
<snip>実際のコマンドは以下のようになります。
expr \( `date -d'年/月/日' +%s` - `date -d'年/月/日' +%s` \) / 60 / 60 / 24
上記で記したコマンドで日付どうしの引き算をおこなって日数を求めてみます。
$ expr \( `date -d'2013/1/21' +%s` - `date -d'2011/3/11' +%s` \) / 60 / 60 / 24 682上記の例では、682日と算出されました。
以下のシェルスクリプトにより2つの日付を指定することにより日数を算出することができます。
#!/bin/bash
function calc_date() {
expr \( `date -d"$1" +%s` - `date -d"$2" +%s` \) / 86400
}
function usage() {
echo "Usage: basename $0 datestr datestr"
exit 1
}
if [ $# -ne 2 ]; then
usage
fi
calc_date $1 $2
実際に上記スクリプトを実行した出力結果です。
上記のシェルスクリプトをchmodコマンドで実行権限をあたえています。
$ chmod +x calc_date.sh
3つ日付どうしの引き算をしてみた出力結果です。
$ ./calc_date.sh 2013/1/21 2013/1/20 1 $ ./calc_date.sh 2013/1/21 2013/1/1 20 $ ./calc_date.sh 2013/1/21 2012/1/21 366
以上、exprコマンドとdateコマンドを使用して間の日数を算出する方法でした。