我有这些条件:
$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
开头时,它被解释为八进制。但是八进制没有数字8
和9
,所以数字解析器会停在这些字符上,并将08
和09
解释为a
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;
...
扩展@Barmars答案,
甚至
if(09 < "09")
{
echo "yes";
}
else
{
echo "false";
}
将回声yes
使用格式字符G
,以避免前导零。
echo $now->format("M j, Y G:i:s O")
然后进行比较。