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

PHP:判断时间差最大区间并极简显示剩余时间

如何根据时间差动态显示最简剩余时间(仅展示非零单位)

需求核心:计算当前时间与目标时间的差值后,根据差值所在区间,仅保留必要的非零时间单位进行展示,比如不足1小时只显示分钟、1天内显示小时+分钟,以此类推。

PHP 实现方案

以下是贴合需求的代码实现,同时修正了原示例中的变量名错误:

<?php
$now = new DateTime('now');
// 示例:设置过期时间为3周后
$expire_on = (new DateTime())->modify('+3 weeks');
$time_left = $now->diff($expire_on);

// 收集所有非零的时间单位(从大到小排序)
$parts = [];
if ($time_left->y > 0) {
    $parts[] = $time_left->y . '年';
}
if ($time_left->m > 0) {
    $parts[] = $time_left->m . '月';
}
// 将天数转换为周+剩余天数
if ($time_left->d >= 7) {
    $weeks = floor($time_left->d / 7);
    $parts[] = $weeks . '周';
    $time_left->d = $time_left->d % 7;
}
if ($time_left->d > 0) {
    $parts[] = $time_left->d . '天';
}
if ($time_left->h > 0) {
    $parts[] = $time_left->h . '小时';
}
if ($time_left->i > 0) {
    $parts[] = $time_left->i . '分钟';
}

// 根据区间筛选需要展示的层级(完全匹配伪逻辑)
$display_parts = [];
// 按实际日历属性判断区间,比按秒数更精准
if ($time_left->y == 0 && $time_left->m == 0 && $time_left->d == 0 && $time_left->h == 0) {
    // 不足1小时:仅显示分钟
    $display_parts = array_slice($parts, -1);
} elseif ($time_left->y == 0 && $time_left->m == 0 && $time_left->d == 0) {
    // 不足1天:显示小时+分钟
    $display_parts = array_slice($parts, -2);
} elseif ($time_left->y == 0 && $time_left->m == 0 && $time_left->d < 7) {
    // 不足1周:显示天+小时+分钟
    $display_parts = array_slice($parts, -3);
} elseif ($time_left->y == 0 && $time_left->m == 0) {
    // 不足1个月:显示周+天+小时+分钟
    $display_parts = array_slice($parts, -4);
} elseif ($time_left->y == 0) {
    // 不足1年:显示所有非零的月、周、天、小时、分钟
    $display_parts = $parts;
}

// 输出最终结果
echo '剩余' . implode('', $display_parts);
?>

逻辑说明

  1. 时间差拆分:通过DateTime::diff()获取DateInterval对象,提取年、月、日等非零单位,同时将天数转换为周+剩余天数,符合需求中的区间定义。
  2. 区间判断:直接基于DateInterval的属性判断区间,避免了按平均天数/秒数计算的误差(比如不同月份天数差异、闰年影响)。
  3. 最简展示:根据区间截取对应层级的非零单位,确保只显示必要信息,不会出现带零值的冗余内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:13:15