为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
MMTTMM 2021-06-30 17:20:55
首先,感谢允许我提出这个问题,我有一个非常奇怪的问题,我一直在试图找出脚本中错误的来源大约三个小时,最后我找到了一些东西,现在我知道了源代码问题,但不知道如何解决问题,代码给了我这个错误“不能使用 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)并把它而不是动态获取日期的代码脚本工作正常,这里是转储的值$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 的代码时,我得到了代码的预期结果,但不知道是什么让这个代码起作用,第一个给了我这个错误
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

我刚刚解决了我的问题,我想知道为什么它没有给我预期的结果,尽管我使用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;

}

希望这会帮助某人


查看完整回答
反对 回复 2021-07-09
  • 1 回答
  • 0 关注
  • 243 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信