2012-09-05 188 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”)));