2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Carbonで日時の差分を計算して「〇時間〇分〇秒」のように表示する

Posted at

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ライブラリを使用することで、日時の計算やフォーマットを簡単に行うことができます。
また、今回のサンプルプログラムでは、日時の差分を秒数で計算してから時間、分、秒に変換する方法を示しています。
日時の差分を計算する際には、このような方法を使って、目的に合わせた単位に変換することができます。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?