2013-02-12 37 views
0

我在我的網站上遇到了繼續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)); 

回答

1

由於您傳遞的所有值都是字符串,並且第四個值需要是一個數字,所以您需要計數到第四個參數,並確保這是一個數字。如果你的substr被正確地完成了(我沒有檢查),在通過它之前將該值轉換爲數字將是一件簡單的事情。首先要做的是仔細檢查你所傳遞的參數4是否是你認爲的。然後在intval()讀了起來:http://php.net/manual/en/function.intval.php

編輯補充:琢磨一分鐘後,我的問題,你會需要一個這樣的功能(如果你使用MySQL,見UNIX_TIMESTAMP()),即使你確實,strtotime()可能會爲你付出沉重的代價。

+0

好的,我會檢查 – on9cinema 2013-02-12 06:12:17

1

事實上,我認爲你正在尋找的的strtotime函數,而不是mktime:

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

然後,你可以調用的strtotime,而不是使自己的sql_timestamp_to_unix_timestamp功能,除非你要它來處理無效價值不同於strtotime本身。

+0

噢,我也可以使用strtotime ..謝謝 – on9cinema 2013-02-12 06:12:52