2012-09-05 252 views
2

我有一個代碼,但找不到錯誤在哪裏。我有即將舉行的活動和當前時間。如果我將我的事件轉換爲時間戳,那麼它小於當前的時間戳。可能是你可以幫助我。PHP Unix時間戳

我下面的代碼:

<?php 

date_default_timezone_set('Etc/GMT'); 

$upcoming  = "2012.09.05 23:50"; 
$current  = time(); 

echo "Upcoming: " . $upcoming . " | Timestamp:" . mktime(23, 50, 0, 09, 05, intval(date("Y"))); 
echo "<br>Current: " . time(); 
echo "<br>Current SIM: " . mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); 


?> 

將輸出:

Upcoming: 2012.09.05 23:50 | Timestamp:1323129000 
Current: 1346855221 
Current SIM: 1346855220 

WHERE CURRENT>即將時間戳。 (???) 謝謝!

+0

是的。此字符串:date_default_timezone_set('Etc/GMT'); – user889349

回答

7

因爲你有09(帶有前導0)這個數字被解釋爲一個八進制數,所以它會轉換爲0。 用途:mktime(23, 50, 0, 9, 5, intval(date("Y")));

您可以探索這個「功能」了一下;

var_dump(9); // int 9 
var_dump(09); // int 0 
var_dump(07); // int 7 
var_dump(17); // int 17 
var_dump(017); // int 15 

編輯;

date('n');返回沒有前導零的月份。並且date('j');date('G');返回沒有前導零的日子和小時。所以,你可以改變mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y"));mktime(date("G"), date("i"), date("s"), date("n"), date("j"), date("Y"));

有沒有辦法讓分秒的數量,而不與date()前導零所以也許你需要找到另一個功能。

編輯:

要轉換2012.09.05 23:50到一個時間戳,您可以更改./和飼料它strtotime()

$str = '2012.09.05 23:50'; 
$str = str_replace(".", "/", $str); 
$timestamp = strtotime($str); 
+0

那麼如何將09轉換爲9? – user889349

+0

intval(09)return 0; – user889349

+0

您的代碼中有09硬編碼,因此您可以更改代碼。此外; 'date('n');'返回沒有前導零的月份。並且'date('j');'返回前一個零的日期 –

0

告辭而去不必要的零,應該做的伎倆。 (23,50,0,9,5,intval(date(「Y」)));