如何使用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
相关产品推荐
相关产品推荐

