ITのコーチをしています。
Carbonを用いて日時の差分を計算して「〇時間〇分〇秒」のように表示する方法を、メモとして記録します。
Carbonとは
Carbonは、PHPで日付と時刻を扱うためのライブラリの一つです。日時の計算やフォーマットなどを簡単に行うことができます。
PHPには標準で日付と時刻を扱うためのDate関数がありますが、Carbonはさらに簡単に日付と時刻を扱うことができます。
Carbonを使用すると、以下のようなことができます。
- 日付や時刻の加算や減算
- 2つの日時の差分の計算
- 日付や時刻のフォーマット
- 日付や時刻の比較
また、CarbonはLaravelというPHPのWebアプリケーションフレームワークでも使用されています。
LaravelにはCarbonの機能が組み込まれています。
■Carbon公式ドキュメント
https://carbon.nesbot.com/docs/
いろいろとサンプルコードが掲載されています。
■CarbonのGitHubリポジトリ
https://github.com/briannesbitt/carbon
質問やバグ報告なども見れます。
Carbonの基本的な日付と時刻の表現
Carbonでは、日付と時刻を表すクラスが用意されています。
以下のようにしてCarbonクラスのインスタンスを作成することができます。
use Carbon\Carbon;
// 現在の日付と時刻を取得
$now = new Carbon();
// 特定の日時を指定して作成
$date = new Carbon('2023-12-25 08:30:00');
日時の差分を計算する方法
ここでは、Carbonを使用してある日時からある日時までの時間を〇時間〇分〇秒 の形式で計算するプログラム例を紹介します。
use Carbon\Carbon;
// 1.開始日時を設定
$startDate = new Carbon('2023-06-06 10:30:00');
// 2.終了日時を設定
$endDate = new Carbon('2023-06-07 12:45:30');
// 3.差分の秒数を計算
$diffInSeconds = $startDate->diffInSeconds($endDate);
// 4.秒数から時間、分、秒を計算
$hours = floor($diffInSeconds / 3600);
$minutes = floor(($diffInSeconds % 3600) / 60);
$seconds = $diffInSeconds % 60;
// 5.結果を表示
echo "開始日時から終了日時までの時間は、" . $hours . "時間" . $minutes . "分" . $seconds . "秒です。";
「1.開始日時を設定」と「2.終了日時を設定」部分では、それぞれnew Carbon()の引数に日時を表す文字列を指定することで、開始日時と終了日時を設定しています。
「3.差分の秒数を計算」部分では、diffInSecondsを使用することによって、開始日時と終了日時の差分の秒数を取得しています。
このとき、変数$diffInSecondsには、開始日時と終了日時の差分である「26時間15分30秒」を秒数で表したものである、「94430」という数字が格納されます。
このままでは使用することができませんので、秒数をもとに日時の計算をする必要があります。
「4.秒数から時間、分、秒を計算」部分では、差分の秒数をもとに、時間、分、秒を計算しています。
1時間は3600秒であるため、時間は以下のように求めることができます。
$hours = floor($diffInSeconds / 3600);
続いて、変数$diffInSeconds を3600で割った余りを求め、それを60で割ることによって分を求めています。
$minutes = floor(($diffInSeconds % 3600) / 60);
%は、剰余を求める演算子です。例えば、10 % 3は、10を3で割った余りである1を返します。
そのため、$diffInSeconds % 3600は、3600で割った余りであり、時間部分を除いた分と秒の合計秒数を表します。
1分は60秒であるため、「時間部分を除いた分と秒の合計秒数」を60で割ることによって、分を求めています。
また、それぞれfloor()関数を使用することで、小数点以下を切り捨てることができます。
同様に、変数$diffInSeconds を60で割った余りを求めることによって秒数を算出しています。
$seconds = $diffInSeconds % 60;
「5.結果を表示」部分では、開始日時から終了日時までの時間を、時間、分、秒の単位で表示しています。
このプログラムを実行すると、以下のような結果が表示されます。
開始日時から終了日時までの時間は、26時間15分30秒です。
このように、Carbonライブラリを使用することで、日時の計算やフォーマットを簡単に行うことができます。
また、今回のサンプルプログラムでは、日時の差分を秒数で計算してから時間、分、秒に変換する方法を示しています。
日時の差分を計算する際には、このような方法を使って、目的に合わせた単位に変換することができます。