我已经找了好几个小时了,不知所措。我有下面的代码,当八月日期通过switch(作为AUG)语句时,它会不断为值返回0,而不是8。回波结果位于代码块下方。有什么可能出错的想法吗?它似乎在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
我验证了我在注释中的内容。
08是一个不存在的八进制数。使用"08"或8
当你准备输出时,你可以用零填充。
以下是PHP中使用原始代码的说明
$date[1]=08;
echo $date[1];
echo ' | ';
$date[1]=010;
echo $date[1];
输出:
0 | 8
根据我所见,在调用雇佣日期时,您使用$emprow->Hire_Date。
您将这样的日期分隔符"-"分解为3个数组,y、m、d,然后尝试解析"m"。我建议如下:
$date=$emprow->HIRE_DATE;
$unixtime=strtotime($date);
$newdate=date('m',$unixtime);
这应该会给你一个结果(当回显$newdate时)"08"
TecBrat是正确的。您的数字(08)被解释为八进制文字,由于8进制中没有8位数字,因此该数字无效,因此取为0。要解决这个问题,只需在数字周围加引号,就可以将它们视为字符串。
或者,你可以简单地做一些类似的事情
echo date_create('05-AUG-2013')->format('m'); // prints 08
只需删除左侧多余的零(即将08更改为8,将09更改为9,依此类推)或将它们转换为字符串。如果一个数字的左边有一个额外的零,它将被解释为八进制(基数为8的数字系统),其中数字8和9无效,从而破坏代码。