当获取 DatePeriod 日期并遍历它们时,它给了我这个错误

首先,感谢允许我提出这个问题,我有一个非常奇怪的问题,我一直在试图找出脚本中错误的来源大约三个小时,最后我找到了一些东西,现在我知道了源代码问题,但不知道如何解决问题,代码给了我这个错误“不能使用 DateTime 类型的对象作为数组”我有这个代码


$academicYear = \academic_year::where('isDefault', 1)->first();


$firstTerm = new \DatePeriod(

    new \DateTime($academicYear->firstterm_start_date),

    new \DateInterval('P1M'),

    new \DateTime($academicYear->firstterm_end_date)

);


$secondTerm = new \DatePeriod(

    new \DateTime($academicYear->secondterm_start_date),

    new \DateInterval('P1M'),

    new \DateTime($academicYear->secondterm_end_date)

);


$monthlyDates = [];

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

    $monthlyDates[] = ['date' => strtotime((string)$value->format('Y-m-d')), 'due' => strtotime((string)$value->format('Y-m-d')) ];

}


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

    $monthlyDates[] = ['date' => strtotime((string)$value->format('Y-m-d')), 'due' => strtotime((string)$value->format('Y-m-d'))];

}

我在这里要做的只是获取两个日期之间的日期,间隔为一个月,并更改日期的结构以使其成为数组中的日期和到期日,并获取由此生成的这些日期的 unix 时间戳DatePeriod 类


所以奇怪的是,当我以这种方式尝试代码时,它给了我这个错误,因为这段代码的结果进入另一个 foreach 循环,当我尝试这个代码时,它给我"Cannot use object of type DateTime as array" ,当我得到die 和 dump 的结果dd($monthlyDates)并把它而不是动态获取日期的代码脚本工作正常,这里是

http://img4.mukewang.com/60e7ae6d0001481603040570.jpg

转储的值$monthlyDates


下面的代码是dd($monthlyDates)我使用的数组而不是 \DatePeriod 结果


$monthlyDates = [

    0 => [

        'date'=> 1569888000,

        'due' => 1569888000 

    ],

    1 => [

        'date' => 1572566400,

        'due' => 1572566400

    ],

    2 => [

        'date' => 1575158400,

        'due' => 1575158400

    ],

    3 => [

        'date' => 1580515200,

        'due' => 1580515200

    ],

    4 => [

        'date' => 1583020800,

        'due' => 1583020800

    ],

    5 => [

        'date' => 1585699200,

        'due' => 1585699200

    ]

];

所以当我使用上面的这个数组而不是 \DatePeriod 的代码时,我得到了代码的预期结果,但不知道是什么让这个代码起作用,第一个给了我这个错误


MMTTMM
浏览 245回答 1
1回答

白衣非少年

我刚刚解决了我的问题,我想知道为什么它没有给我预期的结果,尽管我使用dd()laravel 的die 和 dump函数找到了预期的结果所以我想如何才能达到这个结果,所以我发现该dd()函数返回一个值所以我在同一个类中创建了一个方法并返回了$monthlyDates我的应用程序需要的方法,现在它就像一个魅力protected function getMonthlyDates($firstTerm , $secondTerm){    $monthlyDates = [];    foreach ($firstTerm as  $value) {        $monthlyDates[] = ['date' => strtotime($value->format('Y-m-d')), 'due' => strtotime($value->format('Y-m-d'))];    }    foreach ($secondTerm as  $value) {        $monthlyDates[] = ['date' => strtotime($value->format('Y-m-d')), 'due' => strtotime($value->format('Y-m-d'))];    }    return $monthlyDates;}希望这会帮助某人
打开App,查看更多内容
随时随地看视频慕课网APP