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

如何在PHP中使用date_diff按规则显示天、月或年

解决时间差按优先级显示的问题

我来帮你搞定这个时间差的显示需求!核心思路是按照年→月→天的优先级判断,只输出最高级别的时间单位,完全符合你给出的规则:小于30天显示天数、大于30天显示月数、月数超12显示年数,而且只保留最相关的那个单位。

实现代码

$date1 = date_create("2013-03-15");
$date2 = date_create("now");
$diff = date_diff($date1, $date2);

// 按优先级判断要显示的内容
if ($diff->y > 0) {
    // 年数大于0时,只显示年(自动处理单复数)
    echo $diff->y . " year" . ($diff->y > 1 ? "s" : "");
} elseif ($diff->m > 0) {
    // 年数为0但月数大于0时,只显示月
    echo $diff->m . " month" . ($diff->m > 1 ? "s" : "");
} else {
    // 年、月都为0时,显示天数
    echo $diff->d . " day" . ($diff->d > 1 ? "s" : "");
}

代码说明

  1. 优先级判断逻辑:先检查年数,再检查月数,最后检查天数,确保只显示最高级的时间单位(比如2年5个月的话,只会显示2 years)
  2. 单复数处理:通过三元运算符判断数值是否大于1,自动添加s,避免出现1 years这种错误表述
  3. 适配所有场景:完全覆盖你提到的三种情况,不管是1天、5个月还是3年,都能正确输出对应的结果

测试案例

  • 时间差为28天 → 输出 28 days
  • 时间差为7个月 → 输出 7 months
  • 时间差为1年2个月 → 输出 1 year

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:35:22