[shell] 2つの日付から経過日数を取得する

WEBサービスを運用していると、様々な管理が発生する。
ログデータ集計や、営利サービスだとデータレポートなども発生するはずだ。
また、サーバー管理をしている人は、バッチ処理として色々なデータ保管処理を行わなければならない。
そんな時のスニペットを1つ作ったので、公開しておきます。
2つの日付から経過日を取得
◯日間の処理を行う際に、「対象日から丸日を経過した」という事を認識する為に、経過日数を取得する時に使って欲しい。
ソースコード
dateDiff.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/bash # 開始日の1900/1/1からの秒数を求める START=`date -d "$1" +%s` # 終了日の1900/1/1からの秒数を求める FINISH=`date -d "$2" +%s` # 終了日 - 開始日 の差分秒を求める DIFF=`expr $FINISH - $START` # 秒分時で割ることで日数が求められる(小数点切り捨て) DAYS=`expr $DIFF / 60 / 60 / 24` # 結果表示 echo $DAYS |
使い方
dateDiff.sh [開始日] [終了日]
※日付は[yyyymmdd]で入力してください。
1 2 |
$ dateDiff.sh 20151201 20160102 > 32 |
解説
- shellでのクエリ受け取り値は「$1」「$2」で行えるので非常に楽に扱える。
- 開始日と終了日は「date -d “日付” +%s」で1900/1/1からの秒数で取得
- 差分秒数の集計は「expr $TODAY – $FROM」で行う
- 秒数を日数に変換「expr $DIFF / 60 / 60 / 24」※shellは基本整数のみなので、小数点は切り捨てられる