Php 断开开关语句
我已经找了好几个小时了,我不知所措。我有下面的代码,当通过switch(as AUG)语句传递八月日期时,它会不断为值返回0,而不是8。回波结果位于代码块下方。对可能出现的问题有什么想法吗?它似乎在7月份运行良好,并在8月1日中断Php 断开开关语句,php,switch-statement,Php,Switch Statement,我已经找了好几个小时了,我不知所措。我有下面的代码,当通过switch(as 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_
$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]);
$when=日期(“Y-m-d”);
$created=日期(“Ymd”);
$date=分解('-',$emprow->HIRE\u date);
echo“
雇用日期为”;打印(日期);回声“
”;
交换机($date[1])
{
案例“JAN”:
$date[1]=01;
打破
案件“2月”:
$date[1]=02;
打破
“MAR”案:
$date[1]=03;
打破
案例“APR”:
$date[1]=04;
打破
“可能”一案:
$date[1]=05;
打破
案例“JUN”:
$date[1]=06;
打破
案件“JUL”:
$date[1]=07;
打破
案件“8月”:
$date[1]=08;
打破
案例“SEP”:
$date[1]=09;
打破
案例“10月”:
$date[1]=10;
打破
案件“11”:
$date[1]=11;
打破
案例“DEC”:
案例“Dec”:
$date[1]=12;
打破
}
echo“
雇用日期为”;打印(日期);回声“
”;
$startdate=sprintf(“%04d%02d%02d”,$date[2],$misc->getmonthnum($date[1]),$date[0]);
其结果如下:
$date=$emprow->HIRE_DATE;
$unixtime=strtotime($date);
$newdate=date('m',$unixtime);
租用日期为Array([0]=>05[1]=>2013年8月[2]=>2013年)
租用日期为数组([0]=>05[1]=>0[2]=>2013)
startdate是20130005根据我的了解,在调用您的雇佣日期时,您使用$emprow->Hire\u date 将这样的日期、分隔符“-”分解为3个数组,y、m、d,然后尝试解析“m”。我建议如下:
$date=$emprow->HIRE_DATE;
$unixtime=strtotime($date);
$newdate=date('m',$unixtime);
这应该会给你一个结果(当回显$newdate时)“08”当调用你的雇佣日期时,我看到你使用$emprow->Hire\u Date 将这样的日期、分隔符“-”分解为3个数组,y、m、d,然后尝试解析“m”。我建议如下:
$date=$emprow->HIRE_DATE;
$unixtime=strtotime($date);
$newdate=date('m',$unixtime);
然后,这将给您一个结果(在回显$newdate时)“08”TecRat是正确的。您的数字(08)被解释为八进制文字,由于基数8中没有8位数字,该数字无效,因此被视为0。要解决这个问题,只需在数字周围加上引号,就可以将它们视为字符串 或者,您可以简单地执行以下操作
echo date_create('05-AUG-2013')->format('m'); // prints 08
TecBrat是正确的。您的数字(08)被解释为八进制文字,由于基数8中没有8位数字,该数字无效,因此被视为0。要解决这个问题,只需在数字周围加上引号,就可以将它们视为字符串 或者,您可以简单地执行以下操作
echo date_create('05-AUG-2013')->format('m'); // prints 08
我验证了我在评论中的内容 08是不存在的八进制数。使用“08”或8 您可以在准备输出时使用零填充 下面是一个用原始代码说明PHP中发生了什么的示例:
$date[1]=08;
echo $date[1];
echo ' | ';
$date[1]=010;
echo $date[1];
输出:
0 | 8
我验证了我在评论中的内容 08是不存在的八进制数。使用“08”或8 您可以在准备输出时使用零填充 下面是一个用原始代码说明PHP中发生了什么的示例:
$date[1]=08;
echo $date[1];
echo ' | ';
$date[1]=010;
echo $date[1];
输出:
0 | 8
只需删除左侧的额外零(即将08更改为8、09更改为9等等),或者将它们转换为字符串。如果一个数字的左边有一个额外的零,它将被解释为一个八进制数(以8为基数的数字系统),其中数字8和9无效,这会破坏您的代码。只需删除左边的额外零(即将08改为8、09改为9等)或将它们转换为字符串即可。如果一个数字的左边有一个额外的零,它将被解释为一个八进制数字(以8为基数的数字系统),其中数字8和9无效,这会破坏您的代码。您可能想将分配的数字更改为字符串,或删除左边填充的零,或者,您可能会遇到将数字视为错误基数的问题。您可能希望将分配的数字更改为字符串,或删除左侧填充的零,或者您可能会遇到将数字视为错误基数的问题。我将代码从08更改为“08”,结果成功。谢谢你告诉我它是如何工作的。我把代码从08改为“08”,它就工作了。谢谢你告诉我它是如何工作的。