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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:27:20