
使用 mktime() 设置当天上午 8 点时,需避免前导零(如 08),否则 PHP 会将其误判为非法八进制字面量而抛出解析错误。正确做法是传入十进制整数 8 和 0。
使用 `mktime()` 设置当天 8 点整时,需避免前导零(如 `08`),否则 php 会将其误判为非法八进制字面量而抛出解析错误。正确做法是传入十进制整数 `8` 和 `0`。
在 PHP 中,mktime() 函数用于根据指定的小时、分钟、秒、月、日、年生成 Unix 时间戳。其典型用法为:
$times = mktime($hour, $minute, $second, $month, $day, $year);
当省略后三个参数(月、日、年)时,mktime() 默认使用当前日期。因此,要获取今天上午 8:00:00 的时间戳,最简洁且安全的写法是:
$times = mktime(8, 0, 0); // ✅ 正确:十进制整数,无前导零
⚠️ 关键注意事项:
- ❌ mktime(08, 0) 会报错 Parse error: Invalid numeric literal,因为以 0 开头的数字(如 08, 09)在 PHP 5.6 及更早版本中被解释为八进制字面量,而 8 和 9 不属于八进制有效数字(0–7),导致语法错误;
- ✅ 自 PHP 7.0 起,带前导零的十进制整数(如 08)已不再被允许,直接触发 Parse Error —— 这是为了消除歧义,强制开发者显式使用 0o(八进制)、0x(十六进制)或无前缀(十进制);
- 推荐始终使用无前导零的整数(如 8, 0, 15),既兼容所有 PHP 版本,又语义清晰。
? 替代方案(更现代、可读性更强):
如果你使用 PHP 5.2+,推荐使用面向对象的 DateTime 类,语义更直观、不易出错:
$times = (new DateTime('today 08:00:00'))->getTimestamp();
// 或分步写法:
$dt = new DateTime('today 08:00:00');
$times = $dt->getTimestamp();该方式自动处理时区(默认为 date_default_timezone_get())、无需记忆参数顺序,也彻底规避了数字字面量解析问题。
立即学习“PHP免费学习笔记(深入)”;
✅ 总结:设 $times 为当天 8 点时间戳,请优先使用 mktime(8, 0, 0)(简洁可靠)或 new DateTime('today 08:00:00')->getTimestamp()(现代推荐)。切勿使用带前导零的数字字面量。



















