PHP时间戳与日期转换及人性化显示实战
在 PHP 开发中,准确处理时间与日期是常见需求。本文详细讲解如何使用 strtotime 和 date 函数进行时间戳与字符串的相互转换,展示如何获取特定时间点(如今日零点),并提供一个完整的自定义函数,用于将时间戳转换为“刚刚”、“X分钟前”等符合用户习惯的人性化显示格式,最后说明日期格式化中月份和日期的补零规则。
核心函数:时间戳与字符串转换基础
PHP 主要使用 strtotime() 将人类可读的时间描述转换为 Unix 时间戳,使用 date() 将时间戳格式化为字符串。
第1步:基本转换操作
目的:掌握时间与时间戳的双向转换。
动作:
1. 使用 strtotime("today") 获取当前日期开始时刻(通常为当天 00:00:00)的时间戳。
2. 使用 date("Y-m-d H:i", $unixtime) 将整数时间戳转换为易读的日期时间字符串,格式为“年-月-日 时:分”。
高级应用:人性化时间差显示
在社交网络或新闻列表中,直接显示具体时间往往不如显示相对时间(如“3小时前”)直观。以下函数实现了基于当前时间与目标时间差的动态显示逻辑。
第2步:实现自定义时间转换函数 transTime
入口:传入一个 Unix 时间戳 $ustime。
逻辑:
1. 定义备用格式:分别准备三种不同精度的日期字符串,以备后续选择:
- 完整日期:$ytime = date("Y-m-d H:i", $ustime);
- 简洁日期:$rtime = date("n月j日 H:i", $ustime);
- 仅时间:$htime = date("H:i", $ustime);
2. 计算时间差:
- $time = time() - $ustime; 计算当前时间与目标时间的秒数差。
- $todaytime = strtotime("today"); 获取今日零点时间戳。
- $time1 = time() - $todaytime; 计算距离今日零点的总秒数(即今天已过去的时间)。
3. 条件判断与返回:
- 如果 $time < 60:显示为 "刚刚"。
- 如果 $time < 60 * 60(小于1小时):计算分钟数 floor($time/60),显示为 "X分钟前"。
- 如果 $time < $time1(在今天内但超过1小时):显示为 "今天 X:X"(取自 $htime)。
- 否则(昨天及更早):显示为 "M月D日 H:i"(取自 $rtime)。
function transTime($ustime) {
$ytime = date("Y-m-d H:i",$ustime);
$rtime = date("n月j日 H:i",$ustime);
$htime = date("H:i",$ustime);
// 计算当前时间与目标时间的差值
$time = time() - $ustime;
// 计算今天已过去的秒数,用于区分“今天”与“昨天”
$todaytime = strtotime("today");
$time1 = time() - $todaytime;
if($time < 60) {
$str = '刚刚';
} else if($time < 60 * 60) {
$min = floor($time/60);
$str = $min.'分钟前';
} else if($time < $time1) {
// 发生在今天,但超过1小时前
$str = '今天 '.$htime;
} else {
// 昨天或以前的日期
$str = $rtime;
}
return $str;
}
该函数提供了基础的相对时间显示框架。可根据业务需求扩展更细致的判断,例如添加“前天”、“XX秒前”或“XX天前”的判断逻辑。
日期格式化细节:补零规则
在使用 date()
- 补零格式:使用大写
m和d。例如echo date('Y-m-d');会输出2012-08-08,不足两位的数字前面会自动补 0。 - 不补零格式:使用小写
n和j。例如echo date('Y-n-j');会输出2012-8-8,数字保持原始位数。
以上就是PHP时间戳与日期转换、时间差显示及格式化规则的详细内容,更多关于PHP开发实用技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









