@Mazino

Почему не мутирует экземпляр Carbon?

У меня имеются записи в бд у которых есть поля from_date, to_date.
Задача сделать из этих записей выборку и найти в них наименьшую и наибольшую даты соответственно для полей from_date, to_date. C этим я справился, теперь нужно создать помесячный справочник, который будет укладываться в этот диапазон, если количество месяцев больше 12, оборачивать их по номеру года, в пределах которого, лежит дата месяца.
use Carbon\Carbon;

$from = new Carbon($collection->pluck('from_date')->min()); //@Carbon 2017-11-01 00:00:00.0
$to = new Carbon($collection->pluck('to_date')->max()); //@Carbon 2019-03-31 23:59:59.0
$dates = [];
while($from->lessThanOrEqual($to)) {
    array_push($dates, $from->addMonths(1));
}
var_dump($dates); //~ 2 десятка записей @Carbon 2019-04-01 00:00:00.0

Почему карбон не мутирует? Если:
while($from->lessThanOrEqual($to)) {
    echo $from->addMonths(1); //Каждая новая дата, корректно начинается с месяца следующего за предшествующим 
}
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
В смысле не мутирует? Мутирует, но вы же в массив записываете ссылку на один и тот-же обьект. У вас массив из 20 ссылок на один и тот же обьект $from. Вам нужен clone, типа

while($from->lessThanOrEqual($to)) {
    array_push($dates, clone $from->addMonths(1));
}


ну или ->copy() если так больше нравится.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы