PHP 8.3 中将时间戳转为中文日期描述需分两类处理:标准格式用 setlocale() + strftime()(需系统支持 zh_CN.UTF-8)或数组映射;语义化相对时间(如“刚刚”“昨天”)须手写逻辑判断时间差,并注意时间戳类型、时区统一与 PHP 8.3 严格类型要求。

PHP 8.3 中将时间戳转为中文日期描述,核心在于结合 date()、strftime()(需注意 locale 支持)或手动映射 + 格式化逻辑。由于 PHP 默认不内置中文日期格式化函数,需自行处理“刚刚”“昨天”“前天”“X天前”“X月X日”“今年X月X日”“去年X月X日”等语义化表达。
基础时间戳转标准中文日期(如:2024年10月5日 星期六)
使用 setlocale() + strftime() 是最接近系统级本地化的方案,但需确保系统支持 zh_CN.UTF-8 locale:
- Linux/macOS 下通常可用:
setlocale(LC_TIME, 'zh_CN.UTF-8'); - 然后用
strftime('%Y年%m月%d日 %A', $timestamp)—— 注意%A输出中文星期需 locale 生效 - Windows 可能需用
'Chinese_China.936'或改用数组映射法更稳妥
语义化相对时间(如:刚刚、2分钟前、昨天)
这是高频需求,推荐手写逻辑判断,不依赖扩展。关键是比较当前时间与目标时间戳的秒级差值:
- ≤ 60 秒 → “刚刚”
- ≤ 3600 秒(1小时)→ “X分钟前”
- ≤ 86400 秒(1天)→ “X小时前”
- == 86400 → “昨天”
- == 172800 → “前天”
- ≤ 604800(7天内)→ “X天前”
- 同年内 → “m月d日”
- 去年 → “去年m月d日”
- 更早 → “Y年m月d日”
兼容 PHP 8.3 的简洁封装函数示例
以下函数可直接复用,已适配 PHP 8.3 的严格类型和时区安全(建议先设默认时区):
date_default_timezone_set('Asia/Shanghai');
<p>function formatTimeChinese(int $timestamp): string
{
$now = time();
$diff = $now - $timestamp;</p><pre class="brush:php;toolbar:false;">if ($diff <p>}</p>注意事项与避坑点
在 PHP 8.3 环境中特别注意:
- 时间戳必须是 int 类型,字符串时间戳需先用
strtotime()或DateTimeImmutable::createFromFormat()转换 - 避免直接用
date()输出中文星期/月份——它只输出英文,需自行映射数组 - 跨时区场景下,务必统一使用 UTC 时间戳或显式指定时区(如
new DateTimeImmutable('@'.$ts)->setTimezone(new DateTimeZone('Asia/Shanghai'))) - 高并发下频繁调用
time()没问题,但若需极致性能,可考虑缓存$now值一次获取
不复杂但容易忽略细节,写对一次,项目里复用十年。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











