2015-12-22 4 views
4

Я пытаюсь создать несколько кнопок навигации в созданной вами форме типа календаря и im использовать углерод для создания дат.Углерод меняет мою исходную переменную

Это код в контроллере:

if ($date == null) { 
     $date = \Carbon\Carbon::now(); 
    }else{ 
     $date = \Carbon\Carbon::createFromFormat('Y-m-d', $date); 
    } 
    $navDays = ['-7Days' => $date->subDay('7')->toDateString(), 
       '-1Day' => $date->subDay('1')->toDateString(), 
       'Today' => $date->today()->toDateString(), 
       '+1Day' => $date->addDay('1')->toDateString(), 
       '+7Days' => $date->addDay('7')->toDateString()]; 

, а затем i'n мой взгляд, я делаю это:

 @foreach($navDays as $key => $i) 
      <li><a href="/planner/bookings/{{ $i }}" class="small button">{{ $key }}</a></li> 
     @endforeach 

Эта проблема в том, что углерод, кажется, изменить $ date во время создания массива, поскольку это даты получения (с установкой даты на 2015-11-29):

<ul class="button-group even-5"> 
         <li><a href="/planner/bookings/2015-11-22" class="small button">-7Days</a></li> 
         <li><a href="/planner/bookings/2015-11-21" class="small button">-1Day</a></li> 
         <li><a href="/planner/bookings/2015-12-22" class="small button">Today</a></li> 
         <li><a href="/planner/bookings/2015-11-22" class="small button">+1Day</a></li> 
         <li><a href="/planner/bookings/2015-11-29" class="small button">+7Days</a></li> 
       </ul> 

D Кто-нибудь знает, что я делаю неправильно?

С уважением Йохан

ответ

5

Проблема заключается в том, что Вы предполагаете, что subDay()/addDay() не изменяет объект даты, в то время как они делают .... они просто оборачивать вокруг DateTime объект modify() метод:

DateTime::modify -- date_modify — Alters the timestamp

(курсив мой)

Вместо этого используйте

$navDays = [ 
    '-7Days' => (clone $date)->subDay('7')->toDateString(), 
    '-1Day' => (clone $date)->subDay('1')->toDateString(), 
    'Today' => (clone $date)->today()->toDateString(), 
    '+1Day' => (clone $date)->addDay('1')->toDateString(), 
    '+7Days' => (clone $date)->addDay('7')->toDateString() 
]; 
+0

это дает мне ошибку: синтаксическая ошибка, неожиданная '->' (T_OBJECT_OPERATOR), ожидающая ']' Нужно ли устанавливать их перед рукой, а затем добавлять их в массив? –

+0

Извините, понял, что я тестировал в своей среде php7 и не думал, что это не сработает с PHP5 –

+9

У углерода также есть метод копирования, поэтому вы можете сделать что-то вроде ... $ date-> copy() - > subDay ('7') -> toDateString() – nrivero

 Смежные вопросы

  • Нет связанных вопросов^_^