業務で2つの日時の差分時間を計算することが増えてきて、Web上でそういう計算をするサービスはいろいろあるものの、入力が面倒なのでdateコマンド(GNU date)を使って2つの日時の差分時間を計算するスクリプトを作ってみました。

$ date --version
date (GNU coreutils) 8.22
:

$ vi cal_time
#!/bin/bash

# 日時の差分計算
#
# (使用例)
# $ cal_time 20231231 12:00 20240101 00:20
# 12h20m

# 引数取込
from_date=$1
from_time=$2
to_date=$3
to_time=$4

# 引数チェック
if [ ! -n "${from_date}" ] || [ ! -n "${from_time}" ] || [ ! -n "${to_date}" ] || [ ! -n "${to_time}" ]; then
  echo "usage: `basename $0` from_date from_time to_date to_time (date=YYYYMMDD,time=HH:MM:SS)"
  exit
fi

# 通算秒計算
from_total_datetime=$(date --date "${from_date} ${from_time}" +%s)
to_total_datetime=$(date --date "${to_date} ${to_time}" +%s)

# 時間/分の差分計算
diff_time=$(expr \( ${to_total_datetime} - ${from_total_datetime} \) / 3600)
diff_minute=$(expr \( ${to_total_datetime} - ${from_total_datetime} \) % 3600 / 60)

echo ${diff_time}h${diff_minute}m

% chmod +x cal_time

使い方は以下の通りです。(秒の計算はしていません)

% ./cal_time 20231231 12:00 20240101 00:20
12h20m

もし使っていただけるかたがいればご自由にどうぞ。