メインコンテンツへスキップ
  1. ブログ/

Linuxで指定した日から何日経過したか計算する方法

·
Linux コマンド
目次

初めに
#

日付の差分を計算する機会は、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))

活用例
#

このような経過日数の計算は、以下のようなさまざまな場面で活用が可能です。

  • バッチ処理で「○日以上前のデータを削除」する条件分岐に利用
  • ログやバックアップの保管期限を動的にチェック
  • サービス稼働日数を監視・通知するスクリプトへの組み込み
  • ファイルの更新タイミングからの経過日を出力して管理表へ反映

関連記事

【初心者向け解説】grepコマンドでAND・OR検索を行う方法
Linux コマンド
findコマンドで検索したファイルを削除/移動する方法
Linux コマンド
【初心者向け解説】SELinuxの状態を確認する方法
Linux SELinux セキュリティ
AlmaLinux8でruby2.6以上をインストールする方法
Linux プログラム
Linuxでディレクトリ内の容量を表示する方法
Linux プログラム
Linuxでメモリのスワップ使用率を表示する方法
Linux プログラム