PHP中mktime()函数参数类型错误的解决方案

5次阅读

PHP中mktime()函数参数类型错误的解决方案

php升级后mktime()不再接受字符串参数,原代码将日期字符串直接传入导致typeError,需改用time()或正确拆解时间组件。

mktime() 是一个用于根据指定的小时、分钟、秒、月、日、年生成 unix 时间戳的函数,其所有参数必须为整数类型int)。而你的代码中:

$ah = date("H:i:s Y-m-d");  $ahseg = mktime($ah);

$ah 是形如 “14:25:33 2024-06-15” 的字符串,将其整体作为第一个参数($hour)传给 mktime(),php 8.0+ 会严格校验类型并抛出致命错误:

Fatal error: Uncaught TypeError: mktime(): Argument #1 ($hour) must be of type int, String given

⚠️ 关键原因

正确解决方案

立即学习PHP免费学习笔记(深入)”;

方案 1(推荐):如只需当前时间戳 → 直接用 time()

$ahseg = time(); // 返回当前 Unix 时间戳(秒级),简洁高效

方案 2:如需基于特定格式字符串构造时间戳 → 用 strtotime()

$ah = date("H:i:s Y-m-d"); // 例:"14:25:33 2024-06-15" $ahseg = strtotime($ah);   // 自动解析字符串,返回时间戳(支持多种格式)

方案 3:坚持使用 mktime() → 手动提取整数参数

$now = getdate(); // 或用 date_parse() 解析 $ah 字符串 $ahseg = mktime(     (int)$now['hours'],     (int)$now['minutes'],     (int)$now['seconds'],     (int)$now['mon'],     (int)$now['mday'],     (int)$now['year'] ); // 或更安全地解析自定义字符串: $parts = date_parse("2024-06-15 14:25:33"); $ahseg = mktime(     $parts['hour'], $parts['minute'], $parts['second'],     $parts['month'], $parts['day'], $parts['year'] );

? 注意事项

  • strtotime() 是处理日期字符串最常用、最健壮的方式,但需确保输入格式可被识别(如 “Y-m-d H:i:s” 安全兼容);
  • 避免依赖 mktime() 接收非整数参数——这在任何现代 PHP 版本中都不应被视为有效行为;
  • 在 Plesk 环境中,可通过「Websites & Domains」→「PHP Settings」确认并统一 PHP 版本,便于开发与生产环境一致。

总结:该错误本质是代码与新版 PHP 类型安全机制不兼容,修复核心在于明确区分“获取当前时间”与“解析时间字符串”两种场景,并选用语义清晰、类型安全的函数替代模糊传参

text=ZqhQzanResources