初めに #
日付の差分を計算する機会は、Linux環境でのシステム運用において意外と多く存在します。
本記事では、date
コマンドを利用し「特定の日付から何日経過したか」を簡単に算出する方法について解説します。
dateコマンドとは #
date
コマンドは、LinuxやUNIX環境において現在の日付・時刻を表示したり、特定の日付の演算を行ったりするためのコマンドとなります。
フォーマット指定やタイムゾーン指定、UNIXタイムでの出力など、多彩なオプションが存在しログ分析など多くの場面で活用されます。
以下はdateコマンドの最も基本的な使い方となります。
オプションを指定しない場合、システムの現在日時が以下の形式で表示されます。
$ date
2025年 4月 20日 日曜日 12:15:58 JST
経過日数を計算する #
date
コマンドにて経過日数を計算するには現在のUNIX時間を取得し指定した日時からの経過時間を計算する必要があります。
下記のコマンドを実行し日付を確認できます。
echo $((($(date +%s)-$(date -d"年/月/日" +%s))/86400))日
今回は例として2024年1月1日より何日経過したか計算してみます。
$ echo $((($(date +%s)-$(date -d"2024/1/1" +%s))/86400))日
478日
結果から2024年1月1日より「478日」経過している事が分かります。
以下はコマンドを分解した際の処理工程となります。
処理 | 意味 |
---|---|
date +%s |
現在時刻をUNIX時間(1970/01/01 00:00:00 からの経過秒数)で出力 |
date -d "2024/1/1" +%s |
指定日(2024年1月1日)のUNIX時間を出力 |
$(...) |
コマンド置換:コマンドの出力結果を式の中で使用 |
/ 86400 |
秒数を「1日 = 86400秒」で割ることで日数に変換 |
echo $((...)) |
算術展開:数値の計算結果を出力 |
日本時間ではない場合 #
クラウド環境や国外向けのサーバーなどでは、システム時刻がUTC
や別のタイムゾーンに設定されていることがあります。
その場合、dateコマンドで取得される時刻もそのタイムゾーンに基づいたものになるため、日数の計算にズレが生じることがあります。
このような場合は、TZ環境変数
を使って、一時的に日本時間(Asia/Tokyo
)で日付を解釈させることが可能です。
echo $((($(date +%s)-$(TZ=Asia/Tokyo date -d"2024/1/1" +%s))/86400))日
活用例 #
このような経過日数の計算は、以下のようなさまざまな場面で活用が可能です。
- バッチ処理で「○日以上前のデータを削除」する条件分岐に利用
- ログやバックアップの保管期限を動的にチェック
- サービス稼働日数を監視・通知するスクリプトへの組み込み
- ファイルの更新タイミングからの経過日を出力して管理表へ反映