当获取 DatePeriod 日期并循环遍历它们时,它给了我这个错误 "Cannot use object of type DateTime as array"

when getting DatePeriod Dates and looping through them it is giving me this error "Cannot use object of type DateTime as array"

首先,感谢您允许我提出这个问题 我有一个非常奇怪的问题,我一直试图找出我的脚本中错误的根源大约三个小时,最后我找到了一些东西,现在我知道是问题根源的代码但不知道如何解决问题,代码给我这个错误 "Cannot use object of type DateTime as array" 我有这个代码

$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 Class

生成的这些日期

所以奇怪的是,当我以这种方式尝试代码时,它给了我这个错误,因为这段代码进入另一个 foreach 循环,而不是让它成为一个长问题 当我尝试这段代码时,它给了我 "Cannot use object of type DateTime as array" 并且当我得到 die 和 dump 的结果时 dd($monthlyDates) 并把它而不是动态获取日期的代码,脚本工作正常 这是 转储 $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 的代码时,我得到了代码的预期结果,但不知道是什么让这段代码起作用,第一个给我这个错误

我刚刚解决了我的问题,我想知道为什么它没有给我预期的结果,尽管我使用来自 laravel 的 die and dump dd() 函数找到了预期的结果 所以我想我怎样才能达到这个结果所以我发现 dd() 函数 returns 一个值所以我在同一个 class 中创建了一个方法并返回了我需要的 $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;
}

希望这对某人有所帮助