我的网站上出现了持续的mktime错误。
来自functions.php的主要mktime代码如下:
function mkprettytime($s) {
if ($s < 0)
$s = 0;
$t = array();
$t["day"] = floor($s / 86400);
$s -= $t["day"] * 86400;
$t["hour"] = floor($s / 3600);
$s -= $t["hour"] * 3600;
$t["min"] = floor($s / 60);
$s -= $t["min"] * 60;
$t["sec"] = $s;
if ($t["day"])
return $t["day"] . "d " . sprintf("%02d:%02d:%02d", $t["hour"], $t["min"], $t["sec"]);
if ($t["hour"])
return sprintf("%d:%02d:%02d", $t["hour"], $t["min"], $t["sec"]);
return sprintf("%d:%02d", $t["min"], $t["sec"]);
}
function sql_timestamp_to_unix_timestamp($s){
return mktime(substr($s, 11, 2), substr($s, 14, 2), substr($s, 17, 2), substr($s, 5, 2), substr($s, 8, 2), substr($s, 0, 4));
}
错误是:
[12-Feb-2013 11:06:36] PHP Warning: mktime() expects parameter 4 to be long, string given in /home/myweb/public_html/bgcode/functions.php on line 543
543行(来自上面的行/剧本)
return mktime(substr($s, 11, 2), substr($s, 14, 2), substr($s, 17, 2), substr($s, 5, 2), substr($s, 8, 2), substr($s, 0, 4));
答案 0 :(得分:1)
由于您传递的所有值都是字符串,而第四个值必须是数字,因此您需要计算第四个参数并确保它是一个数字。如果您的substr已正确完成(我没有检查),那么在传递之前将该值转换为数字将是一件简单的事情。首先要做的是仔细检查你作为参数4传递的是你认为的。然后阅读intval()
:http://php.net/manual/en/function.intval.php
编辑添加:经过另一分钟的思考后,我怀疑你是否需要这样的函数(如果你使用MySQL,请参阅UNIX_TIMESTAMP()),即使你这样做了,strtotime()也可能会这样做对你来说很重要。
答案 1 :(得分:1)
实际上,我认为你正在寻找strtotime功能,而不是mktime:
http://www.php.net/manual/en/function.strtotime.php
然后你可以调用strtotime而不是自己创建sql_timestamp_to_unix_timestamp函数,除非你希望它以不同于strtotime本身的方式处理无效值。