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

如何用PHP+HTML计算并展示两个日期的天数/周数差?

日期时间差计算异常(始终显示+0 days)的修复及周+天格式实现

问题原因

你当前代码输出+0 days,大概率是因为date_create($_GET['date_started'])或date_create($_GET['date_completed'])返回了false——比如$_GET传递的日期格式不符合PHP可识别的标准(比如非YYYY-MM-DD格式),或者参数为空,导致date_diff无法正确计算两个有效DateTime对象的差值,最终返回0天的结果。

另外,你当前的代码也未实现需求中的「X周X天」格式,这里一起解决。

解决方案

步骤1:校验并获取有效日期对象

先确保从数据库取出的日期能被正确解析为DateTime对象,建议指定明确的日期格式(比如数据库存储的是YYYY-MM-DD),避免自动解析出错:

// 从数据库查询结果中取出日期(替换成你实际的查询逻辑)
$dateStarted = $row['date_started'];
$dateCompleted = $row['date_completed'];

// 用指定格式创建DateTime对象,确保解析成功
$datetime1 = DateTime::createFromFormat('Y-m-d', $dateStarted);
$datetime2 = DateTime::createFromFormat('Y-m-d', $dateCompleted);

// 校验日期有效性
if (!$datetime1 || !$datetime2) {
    $durationText = "无效日期";
} else {
    // 计算总天数差(确保为正数,兼容completed早于started的情况)
    $interval = $datetime2->diff($datetime1);
    $totalDays = abs($interval->days);
    
    // 转换为周和天
    $weeks = floor($totalDays / 7);
    $remainingDays = $totalDays % 7;
    
    // 拼接输出文本
    $durationParts = [];
    if ($weeks > 0) {
        $durationParts[] = "{$weeks}周";
    }
    if ($remainingDays > 0) {
        $durationParts[] = "{$remainingDays}天";
    }
    // 处理刚好整周或整天的情况
    $durationText = empty($durationParts) ? "0天" : implode('', $durationParts);
}

步骤2:表格输出修正

把原来的输出代码替换为:

<td><?php echo $durationText; ?></td>

(如果用的是模板引擎,比如Smarty,就写成{$durationText})

示例验证

对于2024-07-01到2024-07-26:

  • 总天数:25天
  • 周数:25 ÷7 =3(取整),剩余天数:25%7=5
  • 最终输出:3周5天,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:58:22