PHP计算两日期总天数差及日期转时间戳技术咨询
PHP日期计算与时间戳转换问题解答
需求:计算两个日期之间的总天数差(
$current_hour为实际时间戳)。现有PHP代码可输出年、月、日间隔,如何修改以获取总天数?另外,若$current_hour为日期字符串“22-jan-2024”,如何将其转换为类似1705809951的时间戳整数?
原代码如下:
$a = date('Y-M-d' , 1705809951); $b = date('Y-M-d', $current_hour); $start_date = $a; $end_date = $b; $interval = date_diff(date_create($start_date), date_create($end_date)); echo "$interval->y years, $interval->m months, $interval->d days";
一、修改代码获取总天数差
有两种直接有效的方式实现:
方式1:利用DateInterval的days属性
date_diff返回的DateInterval对象自带days属性,该属性直接存储两个日期的总天数差(绝对值,不区分先后顺序)。修改后的代码:
$a = date('Y-M-d' , 1705809951); $b = date('Y-M-d', $current_hour); $start_date = date_create($a); $end_date = date_create($b); $interval = date_diff($start_date, $end_date); echo "总天数差:" . $interval->days;
方式2:直接计算时间戳差值
跳过日期格式化步骤,直接用时间戳差值计算更高效。时间戳是秒数,除以一天的秒数(86400)即可得到总天数:
$timestamp1 = 1705809951; $timestamp2 = $current_hour; // 取绝对值确保结果为正,若需区分正负可去掉abs() $total_days = abs(($timestamp2 - $timestamp1) / 86400); // 转为整数避免夏令时/时区导致的小数问题 $total_days = (int)$total_days; echo "总天数差:" . $total_days;
二、日期字符串转时间戳
针对“22-jan-2024”这类格式,有两种可靠方法:
方式1:使用strtotime()
strtotime()可直接解析标准日期格式:
$date_str = "22-jan-2024"; $timestamp = strtotime($date_str); echo $timestamp; // 输出:1705929600(对应2024-01-22 00:00:00的时间戳)
方式2:使用DateTime::createFromFormat()(更稳妥)
如果日期格式固定,指定格式解析能避免歧义:
$date_str = "22-jan-2024"; // 对应格式:日-月份缩写-年 $date = DateTime::createFromFormat('d-M-Y', $date_str); $timestamp = $date->getTimestamp(); echo $timestamp; // 输出:1705929600
内容的提问来源于stack exchange,提问作者user21120625
相关产品推荐
相关产品推荐

