php 8 中 date() 是设置日期格式最直接方式,需显式设时区(如 asia/shanghai)、正确使用大小写敏感格式符(y/m/d/h 与 y/n/j/h 区分)、时间戳参数必须为整型,废弃 strftime()。

date() 是 PHP 8 中设置日期显示格式最直接、最常用的方式,不需要额外扩展或类库,只要格式字符串写对、时区设准,就能稳定输出。
必须先设时区,否则结果不可靠
PHP 8 默认不强制要求时区,但一旦没设,date() 会回退到系统本地时区(可能不是你想要的),而且在某些配置下会抛 E_WARNING。比如你在服务器上看到时间比北京时间早/晚 8 小时,大概率就是这个原因。
- 用
date_default_timezone_set('Asia/Shanghai')显式设定为中国标准时间(东八区) - 不要依赖
date.timezone配置项——它可能被覆盖或未生效 - 推荐放在脚本开头,或框架的初始化入口处,避免漏设
date() 格式字符串大小写敏感且含义固定
常见错误是把 Y 写成 y、H 写成 h,结果年份变两位、24 小时制变 12 小时制却没意识到。每个字符的含义是硬编码的,不会因语言或区域自动切换。
-
Y:四位年份(2026),y:两位年份(26)——注意歧义风险 -
m:带前导零的月份(09),n:不带零(9)——排序时m更安全 -
d:带前导零的日期(17),j:不带零(17)——中文语境下j更自然 -
H:i:s是 24 小时制,h:i:s A是 12 小时制 + AM/PM
示例:date('Y年n月j日 H:i') 输出 “2026年9月17日 14:23” —— 这种组合兼顾可读性与无歧义。
别再用 strftime(),PHP 8.1+ 已废弃
如果你在旧项目里看到 strftime('%Y年%m月%d日'),现在必须改掉。该函数自 PHP 8.1 起被标记为 #[\Deprecated],未来版本会移除,且 Windows 和部分 Linux 系统对格式符支持不一致(比如 %e 在 Windows 上无效)。
- 替代方案只有两个:
date()(简单场景)或IntlDateFormatter::format()(需 ICU 扩展,支持真正本地化,如“九月十七日”) - 中文显示星期/月份,仍得靠数组映射:
$weekdays = ['星期日', '星期一', ...]; echo $weekdays[date('w')]; - 不要试图用
setlocale()+strftime()搞中文——PHP 8 下已不推荐,且行为不可控
时间戳传参容易忽略的细节
date() 第二个参数是时间戳,类型必须是 int。从数据库取出来的 datetime 字段如果直接传入,大概率是字符串,会导致返回 false 或意外结果。
- 从 MySQL 取时间字段后,先用
strtotime($db_time)转成整型时间戳 - 或者更稳妥:用
DateTime::createFromFormat()解析再调getTimestamp() - 注意
strtotime()对模糊格式(如 "2026/9/17")解析不稳定,建议统一用 ISO 8601 格式("2026-09-17")
示例:date('Y-m-d', strtotime('2026-09-17')) 安全;date('Y-m-d', '2026-09-17') 会失败。
date() 的职责范围——该换工具时就换,别硬撑。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











