尝试使用数组PHP格式化日期时出错

时间:2017-06-15 17:40:25

标签: php arrays laravel datetime

我有一系列日期,我想提供格式' Y-m-d'但是当我尝试时,我收到错误

"在数组"

上调用成员函数格式()

我之前做的是将两个日期传递给返回时间间隔的函数,例如,如果我给出以下两个日期:

scala> val cloned = original.map(_.clone)
cloned: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))

scala> original(0)(0) = 5000

scala> cloned(0)(0)
res43: Int = 0

//changing cloned does not change original array 
scala> cloned(0)(0) = 8888

scala> original(0)(0)
res48: Int = 5000

此功能以Y-m-d格式返回

2017-06-05 | 2017-06-10

我之前没有格式化结果的问题,但是,现在我已经发送了一个已停止工作的数组,这是我的代码

"2017-06-06,2017-06-07,2017-06-08 ...

函数returnDates就是这个

      public function testArray(Request $request)
          {
            if ($request!="" && $request->idUser!="") 
            {
             $timeslot= new Timeslot;
             $idUser=$request->idUser;
             $fecha1=$request->fecha2;//array
             $fecha2=$request->fecha1;//array

             $slotD=$request->slotH;//array
             $i=0;
             $k=0;
             $j=0; 
             foreach ($fecha1 as $key => $value) {
                $date1[$k]=date('Y-m-d', strtotime($value));
              $k++;
             }
             foreach ($fecha2 as $key => $value) {
               $date2[$i]=date('Y-m-d', strtotime($value));
              $i++;
             }


             foreach ($slotD as $key => $value) {
                $value=str_replace("minutos","minutes",$value);
                $slot[$j]=$value;
               $j++;
             }

             $array=array("fechaInicio"=>$date1,"fechaFin"=>$date2,"slot"=>$slot);

             for($l=0;$l<count($date1);$l++)
             {
              $datePeriod["periodo"][]=$timeslot->returnDates($date1[$l],$date2[$l]);//this method give me an array with date intervals
                }
             $dates=array();
             $m=0;

             foreach ($datePeriod as $key => $value)
              {

                $dates[$m][$key]=$value->format('Y-m-d');//ERROR

                $m++;

              }







          }

           return $dates; 
          }

当我使用变量$ datePeriod作为公共变量时,我得到了我想要的结果

function returnDates($fromdate, $todate) {
                    $fromdate =  DateTime::createFromFormat('Y-m-d', $fromdate);
                    $todate =  DateTime::createFromFormat('Y-m-d', $todate);
                    return new   DatePeriod(
                        $fromdate,
                        new  DateInterval('P1D'),
                        $todate->modify('+1 day')
                    );
                }

当我将变量转换为关联数组时出现问题,在这种情况下我该怎么办?

如果我没有格式化日期,这是我得到的数组

for($l=0;$l<count($date1);$l++)
   {
    $datePeriod=$timeslot->returnDates($date1[$l],$date2[$l]);
      }




Result:
    [["2017-06-17"],{"1":"2017-06-18"},{"2":"2017-06-19"},{"3":"2017-06-20"},{"4":"2017-06-21"}]

*更新

这是我的时间段类的代码

[{"periodo":[{"start":{"date":"2017-06-17 18:20:35.000000","timezone_type":3,"timezone":"UTC"},"current":null,"end":{"date":"2017-06-22 18:20:35.000000","timezone_type":3,"timezone":"UTC"},"interval":{"y":0,`"m":0,"d":1,"h":0,"i":0,"s":0,"weekday":0,"weekday_behavior":0,"first_last_day_of":0,"invert":0,"days":false,"special_type":0,"special_amount":0,"have_weekday_relative":0,"have_special_relative":0},"recurrences":1,"include_start_date":true}
        ,{"start":{"date":"2017-06-17 18:20:35.000000","timezone_type":3,"timezone":"UTC"},"current":null,"end":{"date":"2017-06-22 18:20:35.000000","timezone_type":3,"timezone":"UTC"},"interval":{"y":0,"m":0,"d":1,"h":0,"i":0,"s":0,"weekday":0,"weekday_behavior":0,"first_last_day_of":0,"invert":0,"days":false,"special_type":0,"special_amount":0,"have_weekday_relative":0,"have_special_relative":0},"recurrences":1,"include_start_date":true},{"start":{"date":"2017-06-17 18:20:35.000000","timezone_type":3,"timezone":"UTC"},"current":null,"end":{"date":"2017-06-22 18:20:35.000000","timezone_type":3,"timezone":"UTC"},"interval":{"y":0,"m":0,"d":1,"h":0,"i":0,"s":0,"weekday":0,"weekday_behavior":0,"first_last_day_of":0,"invert":0,"days":false,"special_type":0,"special_amount":0,"have_weekday_relative":0,"have_special_relative":0},"recurrences":1,"include_start_date":true}]}]

2 个答案:

答案 0 :(得分:1)

听起来$value不是对象DateTime的实例。 尝试替换此行:

$dates[$m][$key]=$value->format('Y-m-d');//ERROR

这两个:

$timestamp = strtotime($value);
$dates[$m][$key]=date('Y-m-d',$timestamp);//NO ERROR? :-)

您也可以将它组合成一行:

$dates[$m][$key]=date('Y-m-d',strtotime($value));//NO ERROR? :-)

答案 1 :(得分:0)

在解析之前格式化日期应该可以解决问题

 $value['date'] = date('Y-m-d',strtotime($value['date']));
 $dates[$m][$key]=$value;
//This returns the array with the date formatted

 $dates[$m][$key]=date('Y-m-d',strtotime($value['date']));
//This returns just the formatted dates