0

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

4

4 回答 4

1

在调用您的 Hire Date 时,您使用 $emprow->HIRE_DATE,据我所知。

你分解这样的日期,分隔符“-”将其分解为 3 个数组,y、m、d,然后尝试解析“m”。我建议如下:

$date=$emprow->HIRE_DATE;
$unixtime=strtotime($date);
$newdate=date('m',$unixtime);

这应该会给你一个结果(当回显 $newdate 时)“08”

于 2013-08-09T02:50:45.600 回答
1

TecBrat 是正确的。您的数字 (08) 被解释为八进制文字,并且由于基数 8 中没有 8 位数字,因此该数字无效,因此被视为 0。要解决此问题,只需在您的数字周围加上引号,以便处理它们作为字符串。

或者,您可以简单地执行类似的操作

echo date_create('05-AUG-2013')->format('m'); // prints 08
于 2013-08-09T02:55:34.850 回答
1

我验证了我在评论中发表的内容。

08 是一个不存在的八进制数。使用“08”或8

当你准备好输出它时,你可以用零填充。

这是使用原始代码在 PHP 中发生的情况的说明:

$date[1]=08;
echo $date[1];
echo ' | ';
$date[1]=010;
echo $date[1];

输出:

0 | 8
于 2013-08-09T02:55:48.620 回答
1

只需删除左侧那些多余的零(即,将 08 更改为 8,将 09 更改为 9 等等)或将它们转换为字符串。如果一个数字在左边有一个额外的零,它会被解释为一个八进制数(以 8 为基数的数字系统),其中数字 8 和 9 是无效的,从而破坏了您的代码。

于 2013-08-09T02:55:52.727 回答