奇怪PHP日期比较错误
Strange PHP date comparison error
我没有得到预期的结果。基本上我只想比较两个日期(unix 格式)并显示 months/days/hours/..
中的差异
这是代码的摘录:更新 -- 添加了更多代码
$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 填充。
当前问题:代码似乎有效,但在应用程序中无效。出于某种奇怪的原因,我得到
$差异= 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
试试这个:
<?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 ';
}
上面的代码在我的系统上按预期工作。但是,当 ini 文件中未设置位置时,日期函数可能会表现出奇怪的行为。在 PHP 中,您可以使用以下方式设置服务器时区:
date_default_timezone_set ( "Europe/Brussels" );
其他时区可以在这里找到Timezone Strings
我没有得到预期的结果。基本上我只想比较两个日期(unix 格式)并显示 months/days/hours/..
中的差异这是代码的摘录:更新 -- 添加了更多代码
$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 填充。
当前问题:代码似乎有效,但在应用程序中无效。出于某种奇怪的原因,我得到 $差异= 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
试试这个:
<?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 ';
}
上面的代码在我的系统上按预期工作。但是,当 ini 文件中未设置位置时,日期函数可能会表现出奇怪的行为。在 PHP 中,您可以使用以下方式设置服务器时区:
date_default_timezone_set ( "Europe/Brussels" );
其他时区可以在这里找到Timezone Strings