php7中格式化日期时间最直接方式是date()函数,但必须配合strtotime()将字符串转为时间戳使用;错误传字符串会返回false并触发警告,正确写法如date('y-m-d', strtotime('2024-03-15'))。

PHP7 里格式化日期时间,date() 是最直接、最常用的方式,但必须配合时间戳使用;直接传字符串会返回 false 并触发警告。
date() + strtotime() 组合是最简实用方案
适用于处理用户输入的日期字符串(如 "2024-03-15"、"昨天"、"+3 days")或数据库字段值。
-
strtotime()负责把字符串转成 Unix 时间戳(int),它本身不输出格式,只做解析 -
date()只接受int类型的时间戳,不能直接喂字符串,否则报Warning: date(): Invalid date format - 常见错误写法:
date('Y-m-d', '2024-03-15')—— 第二个参数不是整数,结果是false - 正确写法示例:
date('Y-m-d H:i:s', strtotime('2024-03-15 14:30:00'))→"2024-03-15 14:30:00" - 相对时间也一样:
date('m/d/Y', strtotime('next Monday'))
DateTime 类更适合跨时区或需复用对象的场景
PHP7 已全面支持 DateTime,它比纯函数式更健壮,尤其在涉及时区、加减、验证等操作时。
- 构造时务必显式传入时区,比如
new DateTime('2024-03-15', new DateTimeZone('Asia/Shanghai')),否则依赖默认时区,线上/本地容易不一致 - 时区转换必须用
setTimezone()方法,不能只改format()的显示格式,否则只是“视觉欺骗” - 示例:
$dt = new DateTime('2024-03-15 08:00:00', new DateTimeZone('UTC'));→$dt->setTimezone(new DateTimeZone('Asia/Shanghai'));→$dt->format('Y-m-d H:i:s')→"2024-03-15 16:00:00" - 注意:PHP7 中
DateTime::__construct()对非法日期(如"2024-02-30")仍会静默修正为"2024-03-01",这点在 PHP8 才改为抛异常
date_default_timezone_set() 必须放在所有时间操作之前
PHP7 不设时区不会 fatal error,但会触发 E_WARNING,且行为不可控 —— 比如服务器时区是 America/Chicago,你却以为是东八区,差 14 小时都查不到原因。
- 必须在脚本最开头调用,早于任何
date()、strtotime()、new DateTime() - 推荐设为
'Asia/Shanghai',不要用已废弃的'PRC' - 如果项目用 Composer 自动加载,确保
date_default_timezone_set()在入口文件(如index.php)第一行执行,而不是藏在某个类初始化里
真正容易被忽略的是:date() 和 DateTime::format() 的格式字符大小写完全不互通,Y 和 y、m 和 n 表意不同,拼错一个就出错;而 strtotime() 解析失败时返回 false,不是 0 或空字符串,直接参与 date() 会导致静默输出错误日期。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











