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

2016/01/02

Shell テクノロジー プログラミング

t f B! P L
WEBサービスを運用していると、様々な管理が発生する。 ログデータ集計や、営利サービスだとデータレポートなども発生するはずだ。 また、サーバー管理をしている人は、バッチ処理として色々なデータ保管処理を行わなければならない。 そんな時のスニペットを1つ作ったので、公開しておきます。

2つの日付から経過日を取得

◯日間の処理を行う際に、「対象日から丸日を経過した」という事を認識する為に、経過日数を取得する時に使って欲しい。

ソースコード

dateDiff.sh

#!/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]で入力してください。 $ dateDiff.sh 20151201 20160102 > 32

解説

  • shellでのクエリ受け取り値は「$1」「$2」で行えるので非常に楽に扱える。
  • 開始日と終了日は「date -d "日付" +%s」で1900/1/1からの秒数で取得
  • 差分秒数の集計は「expr $TODAY - $FROM」で行う
  • 秒数を日数に変換「expr $DIFF / 60 / 60 / 24」※shellは基本整数のみなので、小数点は切り捨てられる

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ