このエントリーをはてなブックマークに追加


日付と日付の引き算をする方法・expr, date

dateコマンドとexprコマンドを使用することにより、日付と日付の引き算をすることができます。
つまり、指定した2つの日付から間の日数を計算することができます。
以下に日付と日付の引き算の仕方を記します。
本コマンドの動作確認はCentOSで行いました。


関連記事

dateコマンドで秒を取得しexprで引き算する

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

日付の引き算を行ってみる

上記で記したコマンドで日付どうしの引き算をおこなって日数を求めてみます。

  1. 2011/3/11から2013/1/21までの日数を算出
    $ 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コマンドを使用して間の日数を算出する方法でした。



添付ファイル: filecalc_date.zip 701件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:26:55