date() 转换时间戳需传入整型秒级时间戳,注意时区设置(推荐 date_default_timezone_set('asia/shanghai'))和毫秒时间戳需先除以1000,避免警告与日期偏差。

date() 是 PHP 里最常用、也最直接的转换方式,但必须注意时区和参数顺序,否则容易输出错误日期或警告。
用 date() 转换时间戳的基本写法
核心就是把时间戳传给 date() 的第二个参数:date('Y-m-d H:i:s', $timestamp)。第一个参数是格式字符串,第二个是整型时间戳(秒级)。如果省略第二个参数,默认用当前时间戳,这点常被误用。
- 正确示例:
$date = date('Y-m-d', 1717027200); // 输出 2024-05-31 - 错误写法:
date('Y-m-d', '1717027200')—— 字符串类型时间戳会触发警告,PHP 尝试隐式转整型但可能失败 - 注意:
date()不处理毫秒级时间戳,若你拿到的是 13 位(如 JavaScript 的Date.now()),得先除以 1000 并floor()或(int)强转
时区不对导致日期差一天?用 date_default_timezone_set() 或 DateTime
PHP 默认时区是 UTC,而中国用户通常期望东八区结果。不设时区的话,date() 会按 UTC 解释时间戳,再按本地时区显示,极易出错。
- 简单方案:在脚本开头加
date_default_timezone_set('Asia/Shanghai'); - 更健壮方案:用
DateTime类,自带时区控制:$dt = new DateTime('@1717027200'); $dt->setTimezone(new DateTimeZone('Asia/Shanghai')); echo $dt->format('Y-m-d'); - 别用
date_default_timezone_set('PRC')—— 这个时区名已废弃,PHP 8+ 会报 Notice
遇到 Warning: date(): Invalid date.timezone 怎么办
这是 PHP 找不到有效时区配置,常见于 Docker 容器、某些共享主机或 CLI 模式下。它不影响 date() 执行,但会输出警告且结果不可靠。
- 检查当前设置:
echo date_default_timezone_get();,如果返回空或UTC且你没主动设过,大概率有问题 - 临时修复:在代码顶部加
date_default_timezone_set('Asia/Shanghai');(推荐放在入口文件最前) - 永久修复(需权限):修改
php.ini中的date.timezone = Asia/Shanghai,然后重启 PHP-FPM 或 Apache - CLI 下单独运行时,可加参数:
php -d date.timezone=Asia/Shanghai script.php
真正麻烦的不是不会写 date(),而是时间戳来源混乱(前端传的、数据库存的、第三方 API 返回的)、时区混用、以及毫秒/秒单位没对齐——这些地方一错,日期就偏 8 小时或一整天,而且很难一眼看出来。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











