循环中的第一个月号码未转换为月份名称?

时间:2016-08-06 16:11:33

标签: php loops oop

我正在开发一个小型学校管理系统,要求我将学费分期付款存入数据库。每一期都有截止日期,根据截止日期我将月份号码转换为月份名称。

代码完全正常但是我注意到从第一个截止日期提取的第一个月号码没有通过我的函数将其转换为月份名称。以下所有月份的数字都没有问题,它只是循环中的第一个。

我添加分期付款的功能就是这个:

public function addInstallments($prepInt){

    //extraction converted variables
    extract($prepInt);

    //divide total fee by the number of installments to get the value of the installments
    $monthly_fee = round($fees/$number_of_installments,2);

    /*
    Retrieve course id of course
    */
    $model = new CoursesModel();
    $course_id = $model->returnCourseId($code);


    /*
    Save course start date in the due date array because it is going to be the base period for the due date calculations
    */
    $due_date[0] = date('Y-m-d', strtotime("$start_date"));//base date for due date calculations


    //save each installment into the database
    for($i=1;$i<=$number_of_installments;$i++){


        //add 30 days to course start date
        $due_date[] = date('Y-m-d', strtotime("".$due_date[$i-1]." +30 days"));

        //retrieve month name and year from due date
        $month_int = date("m",strtotime($due_date[$i]));    
        $year = date("Y",strtotime($due_date[$i]));
        $month_name = $this->returnNameofMonth($month_int);

        $fieldset = "`course_id`='$course_id',`name`='Propina de $month_name $year',`amount_per_installment`='$monthly_fee',`due_date`='$due_date[$i]'";

        $status = $model->CreateDb('installments',$fieldset); 

    }

    return $status;

这是我将月份数转换为月份名称的功能

/*
    Returns name of the months
    */

    public function returnNameofMonth($month_int){

        switch($month_int){
             case 01:
              return 'Janeiro';
              break;
             case 02:
              return 'Fevereiro';
              break;
             case 03:
              return 'Março';
              break;
             case 04:
              return 'Abril';
              break;
             case 05:
              return 'Maio';
              break;
             case 06:
              return 'Junho';
              break;
             case 07:
              return 'Julho';
              break;
             case 08:
              return 'Agosto';
              break;
             case 09:
              return 'Setembro';
              break;
             case 10:
              return 'Outobro';
              break;
             case 11:
              return 'Novembro';
              break;
             case 12:
              return 'Dezembro';
              break;
        }
    }

N.B。我在使用OOP

当我自己做一些调试时,我发现了两件事:

  1. 当我没有将月份数转换为月份名称时,我的循环的第一个元素的月份数存储在我的数据库中;
  2. 循环的第一个元素无法通过我的returnNameOfMonth()
  3. 我对我的代码进行了第二次测试,我的addInstallments()函数略有变化。随着新的变化,我发现功能已经保存了“测试”。作为数据库中的月份名称,没有任何问题。

            /*
        Add installments 
        */
        public function addInstallments($prepInt){
    
            //extraction converted variables
            extract($prepInt);
    
            //divide total fee by the number of installments to get the value of the installments
            $monthly_fee = round($fees/$number_of_installments,2);
    
            /*
            Retrieve course id of course
            */
            $model = new CoursesModel();
            $course_id = $model->returnCourseId($code);
    
    
            /*
            Save course start date in the due date array because it is going to be the base period for the due date calculations
            */
            $due_date[0] = date('Y-m-d', strtotime("$start_date"));//base date for due date calculations
    
    
            //save each installment into the database
            for($i=1;$i<=$number_of_installments;$i++){
    
    
                //add 30 days to course start date
                $due_date[] = date('Y-m-d', strtotime("".$due_date[$i-1]." +30 days"));
    
                //retrieve month name and year from due date
                $month_int = date("m",strtotime($due_date[$i]));    
                $year = date("Y",strtotime($due_date[$i]));
                //this is the slight change I added
                if($i==1){
                    $month_name = 'teste';
                }
                else{
                  $month_name = $this->returnNameofMonth($month_int);
                }
    
                $fieldset = "`course_id`='$course_id',`name`='Propina de $month_name $year',`amount_per_installment`='$monthly_fee',`due_date`='$due_date[$i]'";
    
                $status = $model->CreateDb('installments',$fieldset); 
    
    }
    
            return $status;
        }
    

    结论。问题似乎在于我的returnNameOfMonth()功能,但到目前为止,我似乎无法弄清问题是什么。

2 个答案:

答案 0 :(得分:2)

简化returnNameofMonth函数,甚至完全删除它,只需使用date来获取月份的全名。如果你想保留这个功能,试试:

/*
Returns name of the months
*/

public function returnNameofMonth($month_int){

return date('F',strtotime($month_int . '/01' . date('Y') . '/'));   

您也可以直接在addInstallments函数中使用它:

$month_name = date('F',strtotime($month_int . '/01' . date('Y') . '/')); 

答案 1 :(得分:1)

如果您需要以m格式('01'..'02')挂载,请使用字符串以避免隐含转换..然后尝试

     switch($month_int){
         case '01':
          return 'Janeiro';
          break;
         case '02':
          return 'Fevereiro';
         .... 

否则可以在

中隐式转换
switch($month_int){
         case 1:
          return 'Janeiro';
          break;
         case 2:
          return 'Fevereiro';
          ...