2

PHP 関数に問題があります。2013-03-28 と 2013-04-01 の間の日数 (より正確には夜) を計算する必要があるときまで、それは機能していました。結果は 4 (03/28 から 03/29、03/29 から 03/30、03/30 から 03/31 および 03/31 から 04/01) になるはずで、私の関数は 3 を返します。 2013 年の同じ日付ではなく、03-28 と 2012-04-01 を使用すると、正しく機能します)。助けてください。

function termLength($dateFrom, $dateTo) {
  $dateFrom = (($dateFrom instanceof DateTime) ? $dateFrom : new DateTime($dateFrom));
  $dateTo = (($dateTo instanceof DateTime) ? $dateTo : new DateTime($dateTo));

  $difference = $dateTo->format('U') - $dateFrom->format('U');
  return floor($difference / (60 * 60 * 24));
}

echo termLength('2013-03-28', '2013-04-01');

// output: 3
// it should be: 4

助けてくれませんか?ありがとう、J.

4

5 に答える 5

5

DateTimeとにかく使用している場合は、DateIntervalメカニズムを使用します。

$diff = $dateFrom->diff($dateTo);
echo $diff->format('%a');

http://php.net/manual/en/datetime.diff.php

于 2012-11-12T07:23:01.407 に答える
1

これを試して:

$start = strtotime('2013-03-28');
$end = strtotime('2013-04-01');

$days_between = ceil(abs($end - $start) / 86400);
于 2012-11-12T07:23:12.280 に答える
0

機能本体:

function dateDifference($startDate = '', $endDate = '') {
  $startDateConverted = strtotime($startDate);
  $endDateConverted = strtotime($endDate);
  $substractedDate = $endDateConverted - $startDateConverted;
  $substractedDate = max(intval($substractedDate), 0);
  $dateDifference = round(abs($substractedDate) / 86400);
  return $dateDifference;
}

電話 :

echo dateDifference('2013-03-28', '2013-04-01');

出力:

4
于 2012-11-12T07:36:47.503 に答える
0

タイムスタンプに変換し、差を計算してから元に戻すことをお勧めします。

于 2012-11-12T07:33:26.847 に答える
0
round(($end_date - $start_date), 0);
于 2012-11-12T07:33:57.040 に答える