时间相关如果条件不能正常工作

时间:2014-10-25 09:06:18

标签: php

我有这些条件:

$year = date('Y');
$month = date('M');
$day = date('j');
$hour = date('H');

if($hour >= 00) $a = 05;
if($hour >= 04) $a = 09;
if($hour >= 08) $a = 13;
if($hour >= 12) $a = 17;
if($hour >= 16) $a = 21;
if($hour >= 20) $a = 01;

这应该意味着如果当前服务器时间是4:10 AM,例如, 然后a应为 09

当我运行测试并回显a时,值为13

以下是我的回应:

<?php 
$now = new DateTime(); 
echo $now->format("M j, Y H:i:s O")."\n"; 
?>

<p>
<?php echo $a ?>
</p>
<p>
<?php echo $month ?>
</p>
<p>
<?php echo $year ?>
</p>
<p>
<?php echo $day ?>
</p>
<p>
<?php echo $hour ?>
</p>

和结果:

Oct 25, 2014 04:59:55 -0400
13
Oct
2014
25
04

2 个答案:

答案 0 :(得分:2)

摆脱数字上的前导零。当数字以0开头时,它被解释为八进制。但八进制没有数字89,因此数字解析器停在这些字符处,并将0809解释为0。这一行:

if ($hour >= 08) $a = 13;

被视为您的书面文字:

if ($hour >= 0) $a = 13;

由于4 >= 0为真,因此会将$a设置为13

实际上,既然你正在处理字符串,那么正确的做法就是使用字符串比较:

if ($hour >= '20') $a = '01';
elseif ($hour >= '16') $a = '21';
elseif ($hour >= '12') $a = 17;
...

答案 1 :(得分:0)

扩展@Barmars回答,

甚至

if(09 < "09")
   {
     echo "yes";
   }
   else
   {
     echo "false";
   }

将回复yes

使用格式字符G,以避免前导零。

echo $now->format("M j, Y G:i:s O")

然后比较。

相关问题