#navi(../)
* 日付と日付の引き算をする方法・expr, date [#dd1c4ef9]
dateコマンドとexprコマンドを使用することにより、日付と日付の引き算をすることができます。~
つまり、指定した2つの日付から間の日数を計算することができます。~
以下に日付と日付の引き算の仕方を記します。~
本コマンドの動作確認はCentOSで行いました。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連記事 [#e14361c0]
-[[今日の日付が月末かどうかをdateコマンドで確認する方法>逆引きシェルスクリプト/今日の日付が月末かどうかをdateコマンドで確認する方法]]
-[[翌日の日付を取得・dateコマンド>逆引きUNIXコマンド/翌日の日付を取得・dateコマンド]]
-[[前日の日付を取得・dateコマンド>逆引きUNIXコマンド/前日の日付を取得・dateコマンド]]
-[[Nヶ月とN日前の日付を取得・dateコマンド>逆引きUNIXコマンド/Nヶ月とN日前の日付を取得・dateコマンド]]
-[[整数演算を行う・exprコマンド>逆引きUNIXコマンド/整数演算を行う・exprコマンド]]
-[[exprコマンドのサンプル>逆引きシェルスクリプト/exprのサンプル]]

* dateコマンドで秒を取得しexprで引き算する [#r9e45106]
dateコマンドの-dと%sを使用して1970/01/01からの経過秒数を取得しexprにより引き算および一日の秒数(60*60*24=86400秒)で割ることにより経過日数を算出しています。
- man dateの抜粋
       $ 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

* 日付の引き算を行ってみる [#dec60fed]
上記で記したコマンドで日付どうしの引き算をおこなって日数を求めてみます。
+ 2011/3/11から2013/1/21までの日数を算出
 $ expr \( `date -d'2013/1/21' +%s` - `date -d'2011/3/11' +%s` \) / 60 / 60 / 24
 682
上記の例では、682日と算出されました。

* 関数を作って動かしてみる [#yad144ff]
以下のシェルスクリプトにより2つの日付を指定することにより日数を算出することができます。
#ref(calc_date.zip)
 #!/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コマンドを使用して間の日数を算出する方法でした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS