PHP日期时间格式化date与strtotime用法
时间:2026-11-14 07:19 作者:emer 分类: PHP
前言
PHP 处理时间最常用 date 格式化和 strtotime 解析相对时间,很多 Bug 来自时区未设置、时间戳单位混淆。本文讲解 date 常用格式、strtotime 解析昨天/下周/相对时间、时区设置、时间戳运算,覆盖日常开发高频场景。
操作步骤
1. 设置时区
date_default_timezone_set('Asia/Shanghai');
2. 当前时间格式化
echo date('Y-m-d H:i:s');
常用字母:Y 年、m 月、d 日、H 时、i 分、s 秒、A 上午下午。
3. 时间戳转格式化
echo date('Y-m-d H:i:s', 1731500000);
4. strtotime 解析相对时间
echo date('Y-m-d', strtotime('yesterday'));
echo date('Y-m-d', strtotime('+1 week'));
echo date('Y-m-d', strtotime('next Monday'));
5. 格式化自定义日期字符串
$ts = strtotime('2026-11-14 10:00:00');
echo date('Y/m/d', $ts);
6. 计算两个日期差
$diff = strtotime('2026-12-01') - strtotime('2026-11-14');
echo floor($diff/86400).' 天';
常见坑
- 没设时区,返回 UTC 时间,和业务差 8 小时。
- 时间戳单位:PHP 是秒,JS 常是毫秒,别混用。
- strtotime 解析非法字符串返回 false,要做空判断。
- 2038 问题对 32 位系统远期时间戳溢出。
- date 格式字母用错(m 月 vs n 无补零),输出不符。
- 夏令时地区相对时间偏移,国内一般无影响。
- 数据库 datetime 与时间戳转换注意格式。
总结
date 负责格式化、strtotime 负责解析相对时间,开头先设 Asia/Shanghai 时区。注意时间戳是秒、解析失败返回 false、日期差按 86400 换算。复杂日期计算可考虑 DateTime 类,可读性更好。
遇到问题加QQ23979811 协助处理