最直接获取当前时间应根据需求选择:需格式化字符串用date()并设时区,需时间戳用time(),复杂时区操作用DateTime类。

PHP 获取当前时间最直接的方式是用 date() 或 time(),但选哪个、怎么用、为什么有时出错——关键看你要的是格式化字符串还是时间戳,以及是否涉及时区。
用 date() 获取格式化当前时间(最常用)
它返回字符串,适合直接展示。默认使用服务器本地时区,若没设对,网页显示可能和用户预期差 8 小时。
- 基础写法:
date('Y-m-d H:i:s')→ 输出类似2024-06-15 14:23:05 - 必须注意:
date()不自动读取系统时区设置,要先调用date_default_timezone_set('Asia/Shanghai'),否则可能触发警告或返回 UTC 时间 - 常见错误:
date('Y-m-d H:i:s', time())冗余——time()是date()的默认参数,不传就自动用当前时间戳 - 格式字符大小写敏感:
H(24 小时制)≠h(12 小时制),i是分钟(不是m,那是月份)
用 time() 和 strtotime() 获取时间戳(适合计算和存储)
时间戳是整数,跨时区安全,数据库存时间字段(如 INT(10))或做加减运算时首选。
-
time()返回当前 Unix 时间戳(秒级),简单可靠,无时区干扰 -
strtotime('now')功能等价于time(),但多一层解析开销;真正有用的是带自然语言的场景,比如strtotime('+3 days')或strtotime('last Monday') - 慎用
strtotime()解析用户输入:含歧义字符串(如'01/02/03')在不同 PHP 版本或 locale 下结果可能不同 - 如果需要毫秒级精度,
time()不够用,得改用microtime(true)
用 DateTime 类处理复杂时区与日期运算(推荐新项目)
面向对象方式更健壮,尤其涉及多时区转换、日期加减、ISO 格式交互时,DateTime 比一堆 date() + strtotime() 组合清晰得多。
立即学习“PHP免费学习笔记(深入)”;
- 获取当前时间:
$dt = new DateTime();,默认用date_default_timezone_get()设定的时区 - 指定时区创建:
new DateTime('now', new DateTimeZone('Europe/London')) - 转时区:
$dt->setTimezone(new DateTimeZone('Asia/Shanghai')) - 格式化输出仍用
$dt->format('Y-m-d H:i:s'),和date()格式符一致 - 避免陷阱:不要用
DateTime::__construct('2024-01-01')解析用户输入,应显式指定格式用DateTime::createFromFormat()
真正容易被忽略的是时区上下文——date() 和 DateTime 默认都依赖全局时区设置,而这个设置可能被框架、扩展或早期代码悄悄修改过。上线前务必确认 date_default_timezone_get() 返回的是你期望的值,而不是 UTC 或空字符串。











