2013-03-24 205 views
1

我有一个问题比较php中的两个unix时间戳。PHP比较UNIX时间戳

$time_now = mktime(); 
if($auction->time_end > $time_now){ 
    //true 
} 
else{ 
    //false 
} 

$ auction-> time_end是1362579127并从db中设置为int。 $ time_now是例如1364129253并设置为int,两者都使用var_dump进行检查,并确实以int形式返回。

问题是,PHP似乎认为1362579127是大于1364129253(返回false),它不是..我在这里错过了什么?如果我将这些值输入到if语句中,它就像它应该那样工作,但是当它比较对象时,它似乎不喜欢它。

+1

你可以做''var_dump' $拍卖方式> time_end'之前的'if'声明,并在这里显示精确的输出?你确定你没有任何拼写错误,你可以显示复制/粘贴的代码吗? – 2013-03-24 13:04:34

+1

Var转储的对象int(1362579127)和mktime int(1364130453) – 2013-03-24 13:07:28

回答

1

看着你的问题,你似乎有逻辑错误的方式。现在的时间总是比过去更长。请尝试以下操作:`$ time_now`和

if($time_now>$auction->time_end){ 
//... 
} 
+1

哦,上帝。深夜编码是最好的。 – 2013-03-24 13:15:55

0

如果您在32位系统上,则int类型的最大值定义为20亿左右。你的这两个数字似乎都太大了。请参阅Documentation

+1

http://codepad.org/BFWIhiiu – Antony 2013-03-24 13:07:26

+4

@Sotapanna - 一个公平点,但我不认为这是问题 - 相同的文档声明如果解释器*“遇到一个超出整数类型范围的数字,它将被解释为一个float。”*所以它不应该影响比较? – Emissary 2013-03-24 13:09:22

+0

@使者,真实。但是,如果没有明确地关注它,处理如此大的数字似乎会造成问题。我建议使用BCMath库进行此类操作。 http://php.net/manual/en/book.bc.php – stpn108 2013-03-24 13:17:38