脚本中的mktime错误!谁能帮我吗?

时间:2013-02-12 05:55:08

标签: php mktime

我的网站上出现了持续的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));

2 个答案:

答案 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本身的方式处理无效值。