при получении DatePeriod Dates и циклическом их отображении возникает ошибка «Не удается использовать объект типа DateTime в качестве массива» - PullRequest
0 голосов
/ 24 мая 2019

Во-первых, спасибо, что позволили мне задать этот вопрос. У меня действительно странная проблема: я пытался выяснить источник ошибки в моем скрипте около трех часов, и, наконец, я что-то достиг, теперь я знаю код, которыйявляется источником проблемы, но не знаю, как решить проблему, код дает мне эту ошибку "Не могу использовать объект типа 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) и поставлю его вместо кода, который получимПри динамической привязке дат скрипт работает нормально, и здесь result сбрасывает значение $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 Ответ

0 голосов
/ 24 мая 2019

Я только что решил свою проблему, мне было интересно, почему она не дает ожидаемого результата, хотя я нашел ожидаемый результат с помощью функции die и dump dd() из laravel Поэтому я подумал, как мне достичь этого результата, поэтому я обнаружил, что функция dd() возвращает значение, поэтому я создал метод в том же классе и возвратил $monthlyDates, который мне нужен для моего приложения, и теперь он работает как шарм * 1004. *

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;
}

надеюсь, это кому-нибудь поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...