Форматирование Carbon Date в Laravel

У меня есть массив углеродных объектов, которые передаются в такое представление:

return view('booking.choose-days')->with(['weekDays' => $weekDays]);

Чтобы проверить, что все в порядке, я сделал DD-массив и увидел, что массивы дат правильно передаются:

array:14 [▼
  0 => Carbon {#252 ▼
    +"date": "2017-04-11 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/London"
  }
  1 => Carbon {#257 ▼
    +"date": "2017-04-12 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/London"
  }
  2 => Carbon {#256 ▼
    +"date": "2017-04-13 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/London"
  }
  3 => Carbon {#255 ▼
    +"date": "2017-04-14 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/London"
  }

...and so forth

При переборе массива в Blade с использованием следующего (полный html опущен):

@foreach ($weekDays as $key => $weekDay)
    <tr id="{{ $key }}">
      <td>
        {{ $weekDay }}
      </td>
    </tr>
@endforeach

Это дает ожидаемый результат:

2017-04-11 00:00:00

2017-04-12 00:00:00

2017-04-13 00:00:00

2017-04-14 00:00:00

2017-04-15 00:00:00

...and so forth

Однако, когда вместо этого выводится:

@foreach ($weekDays as $key => $weekDay)
    <tr id="{{ $key }}">
      <td>
        {{ $weekDay->dayOfWeek }} // now accessing a property
      </td>
    </tr>
@endforeach

Я получаю вывод:

1
1
2
2
2

Вместо ожидаемого 1,2,3,4,5 для Monday, Tuesday, Wednesday и т.д.

Таким образом, даты в массиве верны, когда var_dumped соответствует objects, но при доступе к такому свойству, как dayOfWeek, это дает мне неправильные свойства.

Даты генерируются путем первого чтения two timestamps из URL-адреса — start date и end date. Оба эти значения затем сохраняются в переменных и отправляются в функцию для удаления всех дат выходного дня.

Это вызов функции:

$weekDays = getWeekDays(Carbon::createFromTimestamp($startDate), Carbon::createFromTimestamp($endDate));

И вот функция:

function getWeekDays(Carbon $startDate, Carbon $endDate)
{
    for($date = $startDate; $startDate->lte($endDate); $startDate->addDay()) {
        if ($date->isWeekDay()) {
            $weekdays[] = clone $date;
        }
    }

    return $weekdays;
}

Есть идеи, почему?

Спасибо


person Ows    schedule 10.04.2017    source источник
comment
К сожалению нет. Но спасибо.   -  person Ows    schedule 10.04.2017
comment
Еще более странно, если я передаю массив всего за 5 дней подряд или меньше, он работает, используя мой исходный код выше. Что-то более 5 дней, это немного зацикливается (как и я после просмотра кода в течение 5 часов!)   -  person Ows    schedule 10.04.2017
comment
Что-то не так с вашими датами... я только что попытался воссоздать проблему... и это может произойти, если вы каким-то образом конвертируете дату одной переменной и назначаете ее другой переменной. Например, если вы сделаете это $b = $a->addDay();, это также изменит переменную $a, а $a и $b будут одной и той же переменной! Покажите нам, как вы получаете даты?   -  person lewis4u    schedule 11.04.2017
comment
вы можете попробовать это и отправить? Я чувствую, что вы переопределяете эту функцию где-то paste.laravel.io/kQ9O7   -  person Anar Bayramov    schedule 11.04.2017
comment
Спасибо, Родран. Да, ваш код работает, но я до сих пор не понимаю, почему и как даты не работают! Я мог бы попытаться посмотреть, что происходит, когда я генерирую даты из строки (например, «03/03/2017») вместо метки времени...   -  person Ows    schedule 11.04.2017
comment
Держи это. Нет, извините, передача созданного вами массива в одну и ту же функцию по-прежнему завершается ошибкой при переходе в течение 5 дней подряд. Например, работает для Пн-Пт, но Пн-Пн выводит неправильные дни! Функция не работает видимо...   -  person Ows    schedule 11.04.2017
comment
Проблема решена. Это, вероятно, вас раздражает, но у меня был javascript, который изменил вывод без моего ведома! Так что извините, если я потратил ваше время! Спасибо за вашу помощь!   -  person Ows    schedule 11.04.2017
comment
@Ows опубликуйте свой ответ, чтобы закрыть свой вопрос, может быть, это поможет кому-то   -  person Mr. Pyramid    schedule 10.10.2017


Ответы (1)


Здравствуйте, попробуйте этот код:

 @foreach ($weekDays as $key => $weekDay)
<tr id="{{ $key }}">
  <td>
    {{    \Carbon\Carbon::parse($weekDay)->format('d/m/Y')->dayOfWeek }} // now accessing a property
  </td>
</tr>
 @endforeach
person Boghani Chirag    schedule 11.02.2018
comment
Ваше здоровье. Я посмотрю на это позже! - person Ows; 11.02.2018