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 サイトの他の関連記事を参照してください。