php日期处理需注意:date()转时间戳需整数秒级且设时区;strtotime()解析模糊易错,返回false须用===判断;推荐datetime类,异常安全、时区明确;格式符大小写敏感,文字需反斜杠转义。

PHP里用date()把时间戳转成可读日期
直接用date()函数,第一个参数是格式字符串,第二个是时间戳。不传第二个参数时,默认用当前时间戳。
- 常见错误:传入
0或null当时间戳,结果变成1970-01-01或报Warning: date(): Invalid date format - 时间戳必须是整数(秒级),如果拿到的是毫秒级(比如JavaScript的
Date.now()),得先除以1000再floor()取整 - 注意时区:
date()受date_default_timezone_set()影响,没设的话可能返回UTC时间,和你预期对不上
示例:date('Y-m-d H:i:s', 1717027200) → "2024-05-31 00:00:00"
PHP中strtotime()反向解析日期字符串为时间戳
它能把常见中文/英文日期描述(比如"明天"、"+2 weeks"、"2024-05-31")转成时间戳,但不是万能的。
- 格式模糊时容易出错:比如
"05/06/2024"在美式环境是5月6日,在部分配置下可能被当成6月5日 - 不支持毫秒,也不解析带毫秒的字符串(如
"2024-05-31 12:00:00.123"会截断掉后面) - 返回
false时不报错,只静默失败,务必用=== false判断,别用== false
示例:strtotime('next Monday') → 下周一0点的时间戳;strtotime('2024-05-31') → 当天0点时间戳
立即学习“PHP免费学习笔记(深入)”;
PHP 8.2+ 推荐用DateTime类做更安全的日期转换
比date()和strtotime()更明确、可读性更强,也更容易处理时区和异常。
- 构造失败会抛
Exception,而不是返回false,避免静默错误 - 支持
DateTimeZone对象显式指定时区,比如new DateTime('2024-05-31', new DateTimeZone('Asia/Shanghai')) -
getTimestamp()获取时间戳,format()输出格式化字符串,链式调用清晰 - 注意:
DateTime::createFromFormat()对格式要求严格,比如'Y-m-d'输入'2024/05/31'会返回false
示例:(new DateTime('@1717027200'))->setTimezone(new DateTimeZone('Asia/Shanghai'))->format('Y-m-d H:i:s')
PHP日期格式化里最容易被忽略的date()参数陷阱
看着简单,但几个字母大小写和符号含义差别很大,一不小心就出错。
-
Y(4位年)≠y(2位年);H(24小时制)≠h(12小时制);i(分钟)≠s(秒)≠S(英文序数后缀,如"st") - 想输出文字要用反斜杠转义,比如
'Y年m月d日'要写成'Y\年m\月d\日',否则年会被当成格式符解析 -
date('U')返回当前时间戳,但它是字符串类型,不是整数,需要(int)date('U')才能安全参与计算
示例:date('Y-m-d H:i:s')正确;date('y-m-d h:i:s')可能把下午3点显示成03,还缺AM/PM标识











