Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-计算两个日期之间的天数-2013年3月和4月不工作_Php_Date - Fatal编程技术网

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

PHP-计算两个日期之间的天数-2013年3月和4月不工作,php,date,Php,Date,我的PHP函数有问题。它一直工作到现在,那时我需要计算2013-03-28和2013-04-01之间的天数(或者更准确地说是夜晚)。结果应为4(03/28至03/29、03/29至03/30、03/30至03/31和03/31至04/01),my函数返回3。(当我使用2012-03-28和2012-04-01而不是2013年的相同日期时,它工作正常)。你能帮我吗 function termLength($dateFrom, $dateTo) { $dateFrom = (($dateFrom

我的PHP函数有问题。它一直工作到现在,那时我需要计算2013-03-28和2013-04-01之间的天数(或者更准确地说是夜晚)。结果应为4(03/28至03/29、03/29至03/30、03/30至03/31和03/31至04/01),my函数返回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');
试试这个:

$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');
呼叫:

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

嗯,答案是4。奇怪的是,我也得到了3。只要用deceze(使用DateInterval)提供的方法替换您的差异计算,您应该会得到正确的答案(对我来说很有用)。您的问题可能是时区/DST问题。哦,对不起,我忘了说,我有PHP5.2.9,所以我不能使用DateTime对象的diff方法,但谢谢。顺便说一句,这是真的,这是有效的解决方案。好的。。。你所在时区在这段时间内是否有DST变化?是的,我想是的,我来自欧洲中部-UTC/GMT+1小时。但是strotime是有效的,所以如果参数是DateTime的实例,我将把它格式化为'Y-m-d',然后我将使用strotime(在我看来有点愚蠢,但它有效:-)。哦。。。错误很抱歉,strotime与DateTime->format('U')的工作方式不同。当我使用圆形(或天花板)而不是地板时,它会起作用吗?它会起作用,但天花板而不是地板?我认为更好的是圆的,我也不知道:-(…它在任何情况下都有效吗?@user1817423我想是的,,,在任何情况下