PHP-计算两个日期之间的天数 - 2013年3月和4月不工作



我的PHP功能有问题。到目前为止,它一直在工作,当时我需要在2013-03-28和2013-04-01之间计算天数(或更精确的夜晚)。结果应为4(03/28至03/29,03/29至03/30,03/30至03/31和03/31和03/31至04/01),我的功能返回3.(当我使用2012--03-28和2012-04-01,而不是2013年的同一日期,其工作正常)。你能帮我吗?

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。

如果您无论如何使用DateTime,请使用DateInterval机制:

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

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

尝试以下:

$start = strtotime('2013-03-28');
$end = strtotime('2013-04-01');
$days_between = ceil(abs($end - $start) / 86400);

我建议您将其转换为时间戳,计算差异然后将其转换回。

round(($end_date - $start_date), 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

相关内容

最新更新