You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中Datediff取整返回0问题:如何将同一天计为1天?

问题原因与解决方法

原因分析

你直接对字符串格式的日期做减法操作,PHP会自动尝试将日期字符串转换为数字。但"2022-11-01"这种带横杠的字符串,PHP只会解析到第一个非数字字符(也就是横杠),所以$end和$start都会被转换为2022,两者相减结果为0,加1后得到1。

接着用这个1除以一天的总秒数60*60*24=86400,得到的是一个极小的小数(约0.00001157),round()函数会把这个小数四舍五入为0,这就是$number_of_days返回0的根本原因。

解决方法

处理日期计算应该用PHP专门的日期时间工具,以下两种方案都能满足你的需求:

方案一:使用DateTime类(推荐)

DateTime是PHP官方推荐的日期处理类,能准确处理各种日期场景:

$end = new DateTime("2022-11-01");
$start = new DateTime("2022-11-01");

$diff = $start->diff($end);
// 间隔天数加1,实现包含起止日期的计数
$number_of_days = $diff->days + 1;

echo $number_of_days; // 输出1

当起止日期相同时,diff()返回的days属性为0,加1后得到1天;如果是不同日期(比如2022-11-01到2022-11-03),days为2,加1后得到3天,完全符合包含首尾的计数逻辑。

方案二:使用strtotime转换为时间戳

通过strtotime()把日期字符串转为 Unix 时间戳(从1970年1月1日到目标日期的秒数),再进行计算:

$end = strtotime("2022-11-01");
$start = strtotime("2022-11-01");

// 计算间隔天数后加1
$number_of_days = floor(($end - $start) / (60 * 60 * 24)) + 1;

echo $number_of_days; // 输出1

时间戳相减得到的是两个日期的间隔秒数,除以86400得到间隔天数,加1后就能实现包含起止日期的计数。

内容的提问来源于stack exchange,提问作者michaelmcgurk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:55:31