在 ThinkPHP8 或其他 PHP 环境中,这段代码的功能是计算两个日期之间相隔的天数,并且向下取整。具体来说,它计算两个日期的差异,以天为单位。
让我们逐步解析这段代码:
// 计算两个日期相隔天数,向下取整
function diffBetweenTwoDays($day1, $day2)
{
// 将日期字符串转换为 Unix 时间戳(秒数)
$second1 = strtotime($day1);
$second2 = strtotime($day2);
// 确保 $second1 永远是较大的时间戳
if ($second1 < $second2) {
$tmp = $second2;
$second2 = $second1;
$second1 = $tmp;
}
// 计算两个时间戳之间的秒数差值
// 86400 是一天的秒数 (24小时 * 60分钟 * 60秒)
// 使用 intval() 函数将结果转换为整数(向下取整)
return intval(($second1 - $second2) / 86400);
}
代码解析
strtotime($day1)
和strtotime($day2)
:strtotime()
函数将日期时间字符串转换为 Unix 时间戳(从 1970 年 1 月 1 日开始的秒数)。例如,strtotime('2024-07-30')
会返回2024-07-30
这一天的 Unix 时间戳。
- 交换时间戳:
- 通过
if ($second1 < $second2)
判断,确保$second1
总是大于或等于$second2
。如果不是,则交换这两个时间戳。这是为了确保计算出的天数差异总是正值。
- 通过
- 计算天数差异:
( $second1 - $second2 ) / 86400
计算出两个时间戳之间的秒数差异,然后除以一天的秒数(86400 秒)来得到天数差异。intval()
函数将结果转换为整数,确保向下取整。
示例
假设你有两个日期:'2024-07-30'
和 '2024-07-25'
。计算它们之间的天数差异时:
strtotime('2024-07-30')
和strtotime('2024-07-25')
分别会得到两个时间戳。- 时间戳差异除以 86400 后得到天数差异,结果是 5。
这个函数主要用于日期计算、差异分析等场景中,可以用于获取两个日期之间的间隔天数,而不考虑时间部分。