time() 返回自1970-01-01 00:00:00 UTC起的整数秒级时间戳,不受时区设置影响;需配合date()格式化或直接用于秒级计算,不可误作字符串比较或JSON直传。

time() 返回的是整数秒级时间戳,不是字符串、不是对象,也不受 date_default_timezone_set() 影响——它永远是 UTC 时间起点(1970-01-01 00:00:00)到当前时刻的秒数。
直接调用 time() 就能拿到当前时间戳
不需要参数,不依赖时区配置,服务器系统时间准确它就准:
-
$ts = time();—— 最简写法,赋值给变量备用 -
echo time();—— 直接输出,比如1788267840(对应 2026-08-31 13:04:00 UTC) - 别写成
time(0)或time(null),会触发警告:Warning: time() expects exactly 0 arguments
time() 和 date() 配合才是日常用法
time() 本身不可读,必须用 date() 格式化。注意两点:
- 如果只传格式字符串,
date("Y-m-d")默认自动调用time(),等价于date("Y-m-d", time()) - 但显式传入
time()更清晰,尤其在调试或需要复用时间戳时:$now = time(); echo date("H:i:s", $now); - 时区影响在这里才生效:没设时区时,
date()按服务器本地时间解释该时间戳;设了date_default_timezone_set("Asia/Shanghai")后,同一时间戳会显示为东八区时间(比 UTC 快 8 小时)
做时间计算时,直接对 time() 返回值加减秒数
时间戳本质是整数,加减运算最轻量,比 strtotime("+1 day") 或 DateTime 更快:
- 明天此时:
$tomorrow = time() + 86400; - 30 分钟前:
$before = time() - 1800; - 注意闰秒不处理,PHP 的
time()不考虑闰秒,所有计算按“每天 86400 秒”硬算 - 避免大跨度计算(如“3 个月后”),因为月份天数不固定,用
mktime()或DateTime::modify()更安全
验证或调试时,别把 time() 当作“当前日期字符串”来用
常见误用场景:
- 写成
if ($input == time())做相等判断 —— 几乎总为 false,因为time()每秒都在变 - 拿
time()结果去json_encode()后前端解析出错 —— 它是整数,不是 ISO 字符串,前端 new Date(ts * 1000) 才对 - 存进数据库用
INT(11)而非DATETIME字段 —— 可以,但要确认 MySQL 没开 strict mode 导致插入失败(某些旧版本对超大整数敏感) - 跨服务传递时间戳时,确保双方都用秒级(不是毫秒),PHP 的
time()是秒,microtime(true)才是毫秒浮点数
真正容易被忽略的是:你拿到的这个数字,是服务器那一刻的系统时间快照,它不包含时区信息,也不代表“用户看到的时间”。后续所有格式化、比较、存储,都要明确自己是在 UTC 上操作,还是已切换到某个本地时区——这个分界点,不在 time(),而在你第一次调用 date() 或构造 DateTime 的时候。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











