PHP プロジェクトの 2 つの日付の差を計算しようとしています。
例: 4 月 2 日と 6 月 1 日の違いは何ですか?
違いを計算する最初の方法
4 月 2 日から 5 月 2 日まで = 1 か月。5 月 2 日から 6 月 1 日まで = 30 日。=> 4 月 2 日から 6 月 1 日まで = 1 か月と 30 日
差額
を計算する 2 番目の方法 5 月を 1 か月と数えます。次に、4 月 2 日から 30 日までの日数 (28 日) と 6 月からの日数 (1 日) を足す => 1 か月と 29 日。
ほとんどの人がこの方法で計算していると思うので、最初の方法が正しいと思います。
最初は DateTime::diff() 関数を使用しようとしました
function dateDiff($date1, $date2 = false) {
if (!$date2)
$date2 = date('Y-m-d');
$datetime1 = new DateTime($date1 , new DateTimeZone('EUROPE/Sofia'));
$datetime2 = new DateTime($date2 , new DateTimeZone('EUROPE/Sofia'));
$interval = $datetime1->diff($datetime2);
$y = $interval->format('%y');
$m = $interval->format('%m');
$d = $interval->format('%d');
return $y . " " . $m . " " . $d;
}
しかし、違いが正しく計算されていないことに気付きました。'2015-02-03' と '2015-04-02' の差は1 か月と 30 日(02-03 から 03-03 = 1 か月) である必要があります。その後、残りの日数を 04-02 までカウントします。 、これは 30 です)、 しかし diffはそれを1 か月と 27 日として計算しました (上で述べた 2 番目の方法で差を計算していると思います)。したがって、計算が間違っているか、2 番目の方法が正しい計算方法です。
しかし、この例を調べてみましょう: 2015-05-01 と 2015-03-31 (今回は遡ります)。diff は1 か月の差を返します。これは1 か月と 1 日である必要があると思います。
さらに、2015-05-01 と 2015-02-28 の差は2 か月と 1 日であるはずですが、diff 関数は2 か月と 3 日を返します。
では、2 つの日付の差を計算する正しい方法はどれですか? DateTime::diff() は正しく計算されていますか? そして、最初の方法で2つの日付の差を計算する方法はありますか.