2015-04-05 3 views
6

При выполнении следующих действий в Laravel Artisan Тинкер:Carbon Carbon :: сейчас() бросает InvalidArgumentException с сообщением 'Скользящий данные'

$article = new App\Article; 
$article->published_at = Carbon\Carbon::now(); 

Я получаю эту ошибку:

InvalidArgumentException with message 'Trailing data' 

Однако Carbon\Carbon::now() на его собственном возврате экземпляр Carbon, как и ожидалось.

published_at должен быть мутирован в Углеродный экземпляр через protected $dates = ['published_at']; в модели, а также включен в protected $fillable.

Кто-нибудь знает, что здесь происходит или как я могу решить?


EDIT: То же самое происходит, когда побежал в затворе в маршрутах, так не специфичны повозиться

EDIT 2: Похоже, другие испытывают это: https://laracasts.com/discuss/channels/general-discussion/carboncarbonnow-giving-error и дважды в комментариях для https://laracasts.com/series/laravel-5-fundamentals/episodes/8

EDIT 3: Совсем точно такой же код, как и первый пример, используется в https://laracasts.com/series/laravel-5-fundamentals/episodes/15 в 15:10 без ошибок.

EDIT 4: Переключение строки 2 вышеуказанного кода на $article->published_at = Carbon::now()->format('Y-m-d'); работает отлично и даже включает время, когда хранится в базе данных (хотя и не совсем понятно).

Я думаю, что «конечные данные» могут относиться к полному дат-времени слишком длинным, но кажется странным, что Laravel делает так много с датами автоматически (например, автоматическое преобразование в экземпляры Carbon), но не это.

Использование в Редактировании 3 было бы предпочтительнее, хотя!

+0

выглядит как обычная ошибка DateTime, однако это не должно произойти с 'сейчас()' метод. Есть ли вероятность, что что-то не так с настройками вашего часового пояса? Как выглядит конфигурация часового пояса в 'config/app.php'? – kajetons

+0

Часовой пояс по умолчанию: '' timezone '=>' UTC ', ' –

+0

Просматривая исходный код, похоже, что он не проходит мимо этой строки' return new DateTimeZone (date_default_timezone_get()); 'во время построения класса. Если это ни к чему не приведет, я сомневаюсь, что вы можете ничего сделать, кроме использования собственных функций даты. – kajetons

ответ

-1

Просто удалите эту функцию:

public function setPublishedAtAttribute($date){ 
    $this->attributes['published_at']=Carbon::createFromFormat('Y-m-d',$date); 
} 

becuase, фиксирующих формат published_at поля уже ...

2

Я обнаружил, что вы должны не должны использовать createFromFormat, если второй $date В параметре нет также объект Carbon, но если это не так, и это просто строка, вы можете просто использовать

public function setPublishedAtAttribute($date){ 
    $this->attributes['published_at'] = Carbon::parse($date); 
} 

Я думаю, что есть немного больше накладных расходов в связи с этим, чтобы выяснить, в каком формате он находится, но это было моим временным решением.

«Y-m-d» - это то, как фронт разбирал его в форме, но он входит в базу данных, из которой вырывается Carbon. Я получил ту же ошибку:

[2015-08-16 21:35:57] production.ERROR: exception 'InvalidArgumentException' with message 'Trailing data' in /Users/alexanderkleinhans/laravel/vendor/nesbot/carbon/src/Carbon/Carbon  .php:414 

Я считаю, что в первой части трассировки стека,

Carbon\Carbon::createFromFormat('Y-m-d', Object(Carbon\Carbon))

указывает, что второй параметр должен быть объектом углерода, так что вы, возможно, придется сделать конечно, это относится к форме, а не только к date('Y-m-d'), как и в PHP.

1

Я следую учебнику Laracast, я столкнулся с той же ошибкой. Наконец я понял, что не так с этим исключением.

В функции:

public function setPublishedAtAttribute($date) 
{ 
    $this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d', $date); 
} 

Замечено, что мой формат даты $ является 'Ymd'

Однако в моем create.blade.php и edit.blade.php, форма вход:

{!! Form::input('data-date', 'published_at', date('d-m-Y'), ['class' => 'form-control']) !!} 

Замечено, что мой формат даты «ДМГ».

Именно по этой причине исключение выбрано Ларавелем.

После того, как я сделал формат даты таким же, как «Y-m-d» по всем файлам, исключение исчезает. Надеюсь, это поможет.

0

Вы получите эту ошибку, если база данных возвращает значение даты с десятичной микропоры, как это:

2016-10-06 20:16:23.96034

Эти дополнительные десятичные цифры проблема. Удалите их, и он должен работать.