PHP使用date_diff计算相同日期返回0天,如何修改为返回1天?
问题原因
date_diff() 函数的设计逻辑是计算两个时间点之间的实际时间间隔,当两个日期完全相同时,间隔时长为0,因此format输出的%d字段返回0是符合预期的。你需要的是「包含起止日期的计数规则」,属于自定义业务逻辑,额外加一层判断处理即可。
实现代码
date_default_timezone_set("Europe/Rome"); $start = '2021-09-17'; $end = '2021-09-17'; $startDate = date_create($start); $endDate = date_create($end); $intervalo = date_diff($startDate, $endDate); // 仅处理日期完全相同的场景,天数置为1 $outputDays = ($startDate == $endDate) ? 1 : $intervalo->d; // 拼接输出结果 echo sprintf("Years:%s,Months:%s,Days:%d,Hours:%s,Minutes:%s,Seconds:%s", $intervalo->y, $intervalo->m, $outputDays, $intervalo->h, $intervalo->i, $intervalo->s );
扩展说明
如果你的业务需要所有场景都按「包含首尾日期」计数(比如2021-09-17到2021-09-18算2天),可以直接对间隔的总天数加1,不需要单独判断:
$outputDays = $intervalo->days + 1;
如果传入的日期字符串带时分秒,且需要忽略时分秒仅按日期判断是否为同一天,可以把判断逻辑修改为:
$outputDays = ($startDate->format('Y-m-d') == $endDate->format('Y-m-d')) ? 1 : $intervalo->d;
内容的提问来源于stack exchange,提问作者Fynn
相关产品推荐
相关产品推荐

