PHPで文字列から期間を計算する最も一般的な方法は、**DateTime** クラスを利用する方法です
2 つのDateTimeオブジェクトを引数に渡し、date_diff関数でその差を計算します
DateTimeクラスを利用した期間計算
PHPで文字列から期間を計算する最も一般的な方法は、DateTime クラスを利用する方法です。
このクラスは、日付と時刻に関するさまざまな操作を可能にします。
具体的な手順:
- DateTimeオブジェクトの作成:
それぞれの文字列をDateTimeオブジェクトに変換します。 - date_diff関数による差の算出:
2つのDateTimeオブジェクトを引数に渡し、date_diff関数でその差を計算します。 - 差分の取得:
date_diff関数の戻り値はDateIntervalオブジェクトになります。このオブジェクトのy、m、dなどのプロパティから、年、月、日の差を取得できます。
コード例:
<?php
$start_date = new DateTime('2011-09-15');
$end_date = new DateTime('2024-12-23');
$interval = date_diff($start_date, $end_date);
// 年、月、日の差を表示
echo '年:', $interval->y, "\n";
echo '月:', $interval->m, "\n";
echo '日:', $interval->d, "\n";
// "何か月と何日"の形で表示
$months = $interval->y * 12 + $interval->m;
$days = $interval->d;
echo '何か月と何日:', $months, 'ヶ月', $days, '日', "\n";
解説:
date_diff($start_date, $end_date): 開始日と終了日の差を計算し、DateIntervalオブジェクトを返します。$interval->y、$interval->m、$interval->d: それぞれ年、月、日の差を表します。$months = $interval->y * 12 + $interval->m: 年を月に換算し、月の合計を計算します。
その他の注意点
- タイムゾーン: DateTimeクラスはタイムゾーンを考慮します。必要に応じてタイムゾーンを設定してください。
- フォーマット: 文字列のフォーマットが異なる場合は、DateTimeコンストラクタの第2引数にフォーマットを指定します。
- 大きな期間: 非常に大きな期間を計算する場合、オーバーフローに注意する必要があります。
より柔軟な表示
上記のコードでは、単純に年、月、日の差を表示していますが、より柔軟な表示形式にすることも可能です。
例えば、日数をすべて月に換算して表示したり、年と月のみを表示したりすることができます。
例:
// 日数をすべて月に換算して表示
$total_months = $interval->y * 12 + $interval->m + floor($interval->d / 30);
echo '合計月数:', $total_months, "\n";
この回答へのレス