ホームページ > バックエンド開発 > PHPチュートリアル > PHP で 2 つの日付の間の月数を正確に計算するにはどうすればよいですか?

PHP で 2 つの日付の間の月数を正確に計算するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-02 12:04:02
オリジナル
696 人が閲覧しました

How can I calculate the number of months between two dates with precision in PHP?

2 つの日付間の期間を正確に決定する

次のシナリオを考えてみましょう: 2 つの日付が変数として保存されており、数値を計算する必要があるとします。その間何ヶ月も。 PHP を使用してこれをエレガントに実現するにはどうすればよいでしょうか?

Date 関数の利用

PHP バージョン 5.3 以降では、時差の正確な計算を可能にする DateTime クラスが提供されています。指定された日付を使用して 2 つの DateTime オブジェクトをインスタンス化し、diff() メソッドを使用して DateInterval オブジェクトを取得します。

<code class="php">$d1 = new DateTime("2009-09-01");
$d2 = new DateTime("2010-05-01");

var_dump($d1->diff($d2)->m); // int(4)
var_dump($d1->diff($d2)->m + ($d1->diff($d2)->y*12)); // int(8)</code>
ログイン後にコピー

以前の PHP バージョンの代替アプローチ

PHP の場合5.3 より前のバージョンでは、UNIX タイムスタンプを利用できます。 strtotime() を使用して日付をタイムスタンプに変換し、絶対差を計算し、それを 1 日の秒数と 1 か月の平均日数で割ります。

<code class="php">$d1 = "2009-09-01";
$d2 = "2010-05-01";

echo (int)abs((strtotime($d1) - strtotime($d2))/(60*60*24*30)); // 8</code>
ログイン後にコピー

データベースに関する考慮事項

データベースから派生した日付の場合は、データベースの組み込み機能を利用して時差を計算することをお勧めします。

正確な月のカウント

精度が重要で、DateTime::diff もデータベース関数も使用できない状況では、ループベースのアプローチを採用して、最小日付が最大日付を超えるまで 1 か月進むにつれてカウンターを増分できます。

<code class="php">$d1 = strtotime("2009-09-01");
$d2 = strtotime("2010-05-01");
$min_date = min($d1, $d2);
$max_date = max($d1, $d2);
$i = 0;

while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) {
    $i++;
}
echo $i; // 8</code>
ログイン後にコピー

以上がPHP で 2 つの日付の間の月数を正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート