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

如何使用PHP计算两个8位格式日期之间的相隔天数

PHP计算两个8位数字格式日期间隔天数的实现方案

核心思路

  • 把形如20211024的8位数字,解析为PHP可识别的日期格式
  • 计算两个日期的时间差,取天数的绝对值保证结果不受输入顺序影响
  • 补充异常校验,避免传入无效日期(如20230230)导致计算结果错误

方案1:基于DateTime类实现(推荐)

自动处理闰年、月份天数差异,兼容性更强,适合生产环境使用:

function calculateDateDiff(int $date1, int $date2): int
{
    // 按Ymd格式解析8位日期数字
    $dt1 = DateTime::createFromFormat('Ymd', (string)$date1);
    $dt2 = DateTime::createFromFormat('Ymd', (string)$date2);
    
    // 校验日期合法性,避免自动修正无效日期导致结果偏差
    if (!$dt1 || !$dt2 || $dt1->format('Ymd') != $date1 || $dt2->format('Ymd') != $date2) {
        throw new InvalidArgumentException('传入的8位日期不合法');
    }
    
    // 返回间隔天数绝对值
    $interval = $dt1->diff($dt2);
    return abs($interval->days);
}

// 调用示例
echo calculateDateDiff(20211024, 20230515); // 输出结果为568

方案2:基于时间戳计算实现(轻量简易)

适合简单业务场景,代码更短:

function calculateDateDiffSimple(int $date1, int $date2): int
{
    // 拆分8位数字为年月日,拼接为标准日期格式后转时间戳
    $timestamp1 = strtotime(sprintf('%s-%s-%s', substr($date1,0,4), substr($date1,4,2), substr($date1,6,2)));
    $timestamp2 = strtotime(sprintf('%s-%s-%s', substr($date2,0,4), substr($date2,4,2), substr($date2,6,2)));
    
    if (!$timestamp1 || !$timestamp2) {
        throw new InvalidArgumentException('传入的8位日期不合法');
    }
    
    // 时间戳差值除以一天的秒数取整
    return abs(round(($timestamp1 - $timestamp2) / 86400));
}

// 调用示例
echo calculateDateDiffSimple(20211024, 20211030); // 输出结果为6

注意事项:如果业务涉及时区,需要提前声明全局时区,可在代码开头添加 date_default_timezone_set('Asia/Shanghai'); 避免计算偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:04