断开的声明

时间:2013-08-09 02:39:19

标签: php switch-statement

我一直在寻找和盯着我看几个小时,我很茫然。我有以下代码,当一个八月日期通过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

4 个答案:

答案 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无效,从而破坏了你的代码。