2

我有一个代码,但找不到错误在哪里。我有即将发生的事件和当前时间。如果我将我的事件转换为时间戳,它会小于当前时间戳。也许你能帮助我。

我的代码如下:

<?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

当前 > 即将到来的时间戳。(???) 谢谢!

4

2 回答 2

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);
于 2012-09-05T14:41:46.900 回答
0

去掉不必要的零,这应该可以解决问题。

mktime(23, 50, 0, 9, 5, intval(date("Y")));

于 2012-09-05T14:43:07.123 回答