php date()函数必须传入格式字符串才能格式化时间,如date('y-m-d')输出2024-06-15;它仅接受字母占位符(y为四位年份、m为带零月份),不支持mysql的%格式;传入无效时间戳会返回1970-01-01。

PHP date() 函数怎么用
直接调用 date() 就能格式化当前时间,但必须传入格式字符串——不传或传错会返回空字符串或 false。
常见错误是把 MySQL 的 %Y-%m-%d 风格直接套进去,PHP 不认这个;它用的是字母占位符,比如 Y 表示 4 位年份,m 表示带前导零的月。
-
date('Y-m-d')→2024-06-15 -
date('H:i:s')→14:23:05(24 小时制) -
date('Y-m-d H:i:s')→2024-06-15 14:23:05 - 想格式化其他时间?得配合
strtotime()或DateTime对象,date()默认只处理当前时间戳
格式字符串里哪些字母不能乱写
大小写敏感,且多数字母有固定含义。比如 h 是 12 小时制小时(01–12),H 是 24 小时制(00–23);i 是分钟(00–59),s 是秒(00–59),u 是微秒(不是毫秒)。
容易踩坑的点:
- 用
y(两位年份)代替Y→ 2024 变成24,后续做日期计算可能出错 - 混淆
l(小写 L,星期几全名)和I(大写 i,是否夏令时)→ 拼错就输出空值 - 想输出中文星期或月份?
date()原生不支持,得用strftime()+setlocale(),或者手动映射 - 斜杠
/、短横-、冒号:这些符号直接写进字符串就行,不需要转义
要格式化数据库里的时间字段怎么办
MySQL 返回的时间通常是字符串(如 "2024-06-15 10:30:00"),不能直接丢给 date()。得先转成时间戳。
- 推荐用
strtotime($mysql_time_string)→ 返回整数时间戳,再喂给date() - 更健壮的做法是用
DateTime:$dt = new DateTime($mysql_time_string);<br>echo $dt->format('Y年m月d日 H:i'); - 注意时区:
strtotime()默认按当前服务器时区解析;DateTime构造时可指定时区,避免跨时区数据错乱 - 如果字段是 Unix 时间戳(int 类型),跳过转换,直接
date('Y-m-d', $timestamp)
为什么有时 date() 输出 1970-01-01
这基本等于告诉你:传进去的时间戳是 0 或无效值(比如 false、null、非数字字符串)。
典型场景:
-
strtotime('')或strtotime('invalid-date')返回false,强转为 int 就是0 - 从数据库取值失败,变量为空,又没校验就直接
date('Y-m-d', $time) - 用了
time()但被意外覆盖(比如变量名冲突) - 检查方法:在调用前加
var_dump($timestamp);,确认是不是整数且 > 0
真正麻烦的是隐式类型转换——比如字符串 "1687651200abc" 会被 date() 当作 0 处理,不会报错,但结果完全不对。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











