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至04/01),my函数返回3。(当我使用2012-03-28和2012-04-01而不是2013年的相同日期时,它工作正常)。你能帮我吗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
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我想是的,,,在任何情况下