奇怪的PHP日期比较错误

时间:2015-07-26 18:51:08

标签: php unix-timestamp

我没有得到预期的结果。基本上我只是想比较两个日期(以unix格式)并显示月/天/小时的差异/...//>

这是代码的摘录:UPDATE - 添加了更多代码

$date = mktime($hour, $min, 0, $month, $day, $year);
$now = time();


echo 'OKdate' . $date . ' now ' . $now . ' now < date ' . ($now < $date);

if($now < $date)
{
    $difference = $date - $now;

    $seconds2 = date('s', $difference);
    $minutes2 = date('i', $difference);
    $hours2 = date('G', $difference) - 1;
    $days2 = date('j', $difference) - 1;
    $months2 = date('n', $difference) - 1;
    $years2 =  date('Y', $difference) - 1970;

    $timeleft = '';
    if(!empty($years2))
        $timeleft .= $years2 . ' year' . ($years2 > 1 ? 's ' : ' ');

    if(!empty($months2))
        $timeleft .= $months2 . ' month' . ($months2 > 1 ? 's ' : ' ');

    if(!empty($days2))
        $timeleft .= $days2 . ' day' . ($days2 > 1 ? 's ' : ' ');

    if(!empty($hours2))
        $timeleft .= $hours2 . ' hour' . ($hours2 > 1 ? 's ' : ' ');

    if(!empty($minutes2))
        $timeleft .= $minutes2 . ' minute' . ($minutes2 > 1 ? 's ' : ' ');

    if(!empty($seconds2))
        $timeleft .= $seconds2 . ' second' . ($seconds2 > 1 ? 's ' : ' ');

    $template = $templates->get('postcountdown_post', 1, 0);
    eval('$temp = "' . $template . '";');
    return $temp;
}

现在,这显示在页面上:

date = 1437950400 
now  = 1437935682 
now < date = true

奇怪的是,这是我通过回显数据得到的结果:

11 months 30 days 22 hours 05 minutes 18 seconds left

感谢您的帮助!

编辑:添加了更多代码---仅供参考:模板里面包含{$ timeleft}。所以eval只是确保{$ timeleft}被PHP评估和填充。

当前问题:代码确实有效,但不在应用程序中。出于某种奇怪的原因,我得到了 $ difference = 12076; PHP使用的日期函数给我:1年,11个月,.... 另一个奇怪的事情是:它确实适用于某些日期;但与其他人不相同,并使其成为1年。 - 或者我的代码中确实存在一个我没有看到的缺陷?

date 1437954000 
now 1437942191 
now < date true
diff 11809
// $...2 variables
seconds 49 
mins 16 
hours 21 
days 30 
months 11 
years -1

2 个答案:

答案 0 :(得分:2)

上面的代码在我的系统上按预期工作。但是,如果未在ini文件中设置位置,则日期函数可能会表现为stange。在PHP中,您可以使用以下命令设置服务器时区:

date_default_timezone_set ( "Europe/Brussels" );

其他时区可以在Timezone Strings

找到

答案 1 :(得分:0)

试试这个:

<?php

$now = 1437950400;
$date  = 1437935682; 

if($now > $date) {

$difference = $now - $date;

$seconds = date('s', $difference);
$minutes = date('i', $difference);
$hours = date('G', $difference) - 1;
$days = date('j', $difference) - 1;
$months = date('n', $difference) - 1;
$years =  date('Y', $difference) - 1970;

echo $years . ' Years ' 
    . $months . ' Months '
    . $days . ' Day '
    . $hours . ' Hours '
    . $minutes . ' Minutes '
    . $seconds . ' Seconds ';
}