我一直在寻找和盯着我看几个小时,我很茫然。我有以下代码,当一个八月日期通过switch(作为AUG)语句传递时,它会继续为值而不是8返回0.回显结果低于代码块。有什么可能出错的想法?它似乎在7月份运作良好,并于8月1日破裂。
$when=date("Y-m-d");
$created=date("Ymd");
$date=explode('-',$emprow->HIRE_DATE);
echo "<br>hire date is ";print_r($date);echo "<br>";
switch ($date[1])
{
case "JAN":
$date[1]=01;
break;
case "FEB":
$date[1]=02;
break;
case "MAR":
$date[1]=03;
break;
case "APR":
$date[1]=04;
break;
case "MAY":
$date[1]=05;
break;
case "JUN":
$date[1]=06;
break;
case "JUL":
$date[1]=07;
break;
case "AUG":
$date[1]=08;
break;
case "SEP":
$date[1]=09;
break;
case "OCT":
$date[1]=10;
break;
case "NOV":
$date[1]=11;
break;
case "DEC":
case "Dec":
$date[1]=12;
break;
}
echo "<br>hire date is ";print_r($date);echo "<br>";
$startdate=sprintf("%04d%02d%02d",$date[2],$misc->getmonthnum($date[1]),$date[0]);
结果如下:
雇用日期为Array ( [0] => 05 [1] => AUG [2] => 2013 )
雇用日期为Array ( [0] => 05 [1] => 0 [2] => 2013 )
开始日期是20130005
答案 0 :(得分:1)
在致电您的雇用日期时,您使用$ emprow-&gt; HIRE_DATE,从我看到的。
你爆炸这样的日期,分隔符“ - ”将它分成3个数组,y,m,d,然后尝试解析'm'。我建议如下:
$date=$emprow->HIRE_DATE;
$unixtime=strtotime($date);
$newdate=date('m',$unixtime);
然后应该给你结果(当回显$ newdate时)“08”
答案 1 :(得分:1)
TecBrat是对的。您的号码(08)被解释为八进制文字,并且由于基数8中没有8位数,因此该数字无效,因此被视为0.为了解决这个问题,只需在您的数字周围加上引号,以便对它们进行处理作为字符串。
或者,您可以简单地执行类似
的操作echo date_create('05-AUG-2013')->format('m'); // prints 08
答案 2 :(得分:1)
我验证了我在评论中的内容。
08是一个不存在的八进制数。使用“08”或8
当您准备输出时,可以用零填充。
以下是使用原始代码在PHP中进行的说明:
$date[1]=08;
echo $date[1];
echo ' | ';
$date[1]=010;
echo $date[1];
输出:
0 | 8
答案 3 :(得分:1)
只需删除左侧的额外零(即更改08至8,09至9等)或将其转换为字符串。如果一个数字在左边有一个额外的零,则它被解释为八进制数字(基数为8的数字系统),其中数字8和9无效,从而破坏了你的代码。