5

重複の可能性:
phpを使用して2つの日付の間の日数を見つける方法

これを行う方法を知りたくありません。なぜ期待した結果が得られないのか知りたい。

次のコードを使用して、YYYY-mm-ddとしてフォーマットされた2つの日付間の日数を計算しようとしています。

$day1 = strtotime($_REQUEST['start']);
$day2 = strtotime($_REQUEST['end']);

$nbOfDays = $day2 - $day1;
$nbOfDays = ceil($nbOfDays/60/60/24);

echo $nbOfDays;

問題は、2012-12-01と2012-12-31の差を計算すると、30日(31である必要があります)になります。また、2012-11-01と2012-11-30の差も30日です(正しい!)

純粋な情報のために更新:

私はこのコードを変更しなければなりませんでした(ジャスティンのおかげで):

$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = round(abs($day2->format('U') - $day1->format('U')) / (60*60*24));
echo $interval;

にとって :

$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$nb1 = $day2->format('U');
$nb2 = $day1->format('U');
$interval = round(abs($nb1 - $nb2) / (60*60*24));
echo $interval;

なぜなら

$day2->format('U') - $day1->format('U')

0に等しかった

したがって、最終的に、2012-12-31と2012-12-01の差はまだ30でした。BUUUTTTT、2012-11-30と2012-11-01の差は29だったので、

echo $interval +1;

いずれにせよ正しい日数を与えます!

4

1 に答える 1

9

日付/時刻の差分には、date_diff()またはそれに相当する OOを使用する必要があります。DateTime::diff()

$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = $day1->diff($day2);
echo $interval->format('%d');

PHP バージョン 5.2 の場合、以下を使用できます。

$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = round(abs($day2->format('U') - $day1->format('U')) / (60*60*24));
echo $interval;

5.2 より前のバージョンの PHP ではstrtotime()、上記の式で使用します。

$day1 = strtotime($_REQUEST['start']);
$day2 = strtotime($_REQUEST['end']);
$interval = round(abs($day2 - $day1) / (60*60*24));
echo $interval;
于 2012-12-19T16:03:51.967 に答える