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


Time related If conditions don't work correctly

我有这些条件:

$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分,则CCD_ 1的值应为CCD_。

然而,当我运行测试并返回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

去掉数字的前导零。当一个数字以0开头时,它被解释为八进制。但是八进制没有数字89,所以数字解析器会停在这些字符上,并将0809解释为a0。所以这条线:

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;
...

扩展@Barmars答案,

甚至

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

将回声yes

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

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

然后进行比较。