最常用PHP获取格式化时间的方式是date()函数,需先用date_default_timezone_set()设置IANA标准时区(如Asia/Shanghai),避免警告;时间戳应直接调用time()而非strtotime(date());跨时区或时间计算推荐DateTime类。

直接用 date() 获取格式化时间最常用
PHP 里最简单的方式就是调用 date() 函数,它默认基于服务器本地时区返回当前时间。比如 date('Y-m-d H:i:s') 输出类似 2024-06-15 14:23:05 的字符串。
注意:如果没显式设置时区,date() 会触发警告(Warning: date(): It is not safe to rely on the system's timezone settings),不是报错但会影响稳定性。
- 必须在脚本开头加
date_default_timezone_set('Asia/Shanghai')或其他合法时区标识 - 时区名不能写成
GMT+8或UTC+8,得用 IANA 标准名,如Asia/Shanghai、Asia/Tokyo、Europe/London - 如果项目已配置
php.ini的date.timezone,可跳过date_default_timezone_set(),但建议代码里显式设,避免环境差异
需要时间戳就用 time(),别用 date() 转换再解析
如果只是要 Unix 时间戳(秒级整数),直接调 time(),比 strtotime(date('Y-m-d H:i:s')) 快且无歧义。
time() 返回的是从 Unix 纪元(1970-01-01 00:00:00 UTC)到现在的秒数,不依赖时区设置——它本身就是 UTC 基准。
立即学习“PHP免费学习笔记(深入)”;
- 要毫秒级时间戳?用
round(microtime(true) * 1000),microtime(true)返回浮点秒数 - 别用
strtotime('now')替代time(),多一层解析,性能差,还可能因语言环境出问题 - 数据库写入时间字段(如 MySQL 的
DATETIME)时,优先用date('Y-m-d H:i:s')而非时间戳,语义清晰、索引友好
用 DateTime 类更灵活,尤其跨时区或做计算
当涉及加减天数、比较两个时间、转换时区,DateTime 比 date() + strtotime() 组合更可靠。
例如获取「当前时间 + 3 天」:$dt = new DateTime(); $dt->modify('+3 days');,之后用 $dt->format('Y-m-d') 输出。
- 构造时可直接传时区:
new DateTime('now', new DateTimeZone('Asia/Shanghai')),避免全局时区干扰 - 和数据库交互时,
$dt->getTimestamp()拿时间戳,$dt->format('c')得 ISO 8601 字符串(如2024-06-15T14:23:05+08:00),适合 API 返回 - 注意
DateTime::__construct()对无效日期(如'2024-02-30')会静默转成下个月,不是报错;要用DateTime::createFromFormat()并检查getLastErrors()
时区设置和类型选择(字符串 / 时间戳 / DateTime 对象)是实际开发中最容易漏掉的两环,尤其是上线后服务器时区和开发机不一致,导致日志时间错乱或定时任务偏移。



















