0

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

2 回答 2

1

由于您传递的所有值都是字符串,并且第四个必须是数字,因此您需要计算到第四个参数并确保它是一个数字。如果您的 substr 正确完成(我没有检查),那么在传递它之前将该值转换为数字将是一件简单的事情。首先要做的是仔细检查您作为参数 4 传递的内容是否与您认为的相同。然后阅读intval(): http: //php.net/manual/en/function.intval.php

编辑补充:经过一分钟的思考,我怀疑您是否需要这样的函数(如果您使用的是 MySQL,请参阅 UNIX_TIMESTAMP()),即使您这样做了,strtotime() 也可能会完成繁重的工作为你。

于 2013-02-12T06:04:52.497 回答
1

实际上,我认为您正在寻找 strtotime 函数,而不是 mktime:

http://www.php.net/manual/en/function.strtotime.php

然后,您可以调用 strtotime 而不是创建自己的 sql_timestamp_to_unix_timestamp 函数,除非您希望它以不同于 strtotime 本身的方式处理无效值。

于 2013-02-12T06:09:38.617 回答