我有这些条件:
$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
答案 0 :(得分:2)
摆脱数字上的前导零。当数字以0
开头时,它被解释为八进制。但八进制没有数字8
和9
,因此数字解析器停在这些字符处,并将08
和09
解释为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")
然后比较。