8

在 Laravel Artisan Tinker 中运行以下命令时:

$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'];在模型中变异为 Carbon 实例,并且它也包含在protected $fillable.

任何人都知道这里发生了什么或我该如何解决?


编辑:在路线的封闭中运行时会发生同样的事情,因此并非特定于 Tinker

编辑 2: 看起来其他人正在经历这个:https://laracasts.com/discuss/channels/general-discussion/carboncarbonnow-giving-error和两次对https://laracasts.com/series/laravel-5-的评论基本面/剧集/8

编辑 3:与第一个示例几乎完全相同的代码在 15:10在https://laracasts.com/series/laravel-5-fundamentals/episodes/15中使用,没有错误。

编辑 4:将上述代码的第 2 行交换为$article->published_at = Carbon::now()->format('Y-m-d');可以正常工作,甚至包括存储在数据库中的时间(尽管不确定原因)。

我猜想“尾随数据”可能是指完整的日期时间太长,但 Laravel 自动对日期时间做了这么多(例如自动转换为 Carbon 实例)似乎很奇怪,但不是这个。

不过,在编辑 3 中使用会更好!

4

8 回答 8

2

我发现你不应该使用createFromFormat,除非第二个参数$date也是 Carbon 对象,但如果不是,它只是一个字符串,你可以使用

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

我认为在必须弄清楚它的格式方面有更多的开销,但这是我的临时解决方法。

'Ymd' 是前端将其解析为表单的方式,但它会进入 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))

表示第二个参数必须是 Carbon 对象,因此您可能必须确保在表单上是这种情况,而不是date('Y-m-d')像在 PHP 中那样。

于 2015-08-16T23:23:19.827 回答
1

我正在关注 Laracast 教程,我遇到了同样的错误。我终于弄清楚了这个异常有什么问题。

在函数中:

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

注意到我的 $date 格式是'Ymd'

但是,在我的 create.blade.php 和 edit.blade.php 中,表单输入为:

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

注意到我的日期格式是'dmY'

这就是 Laravel 抛出异常的原因。

在我将所有文件的日期格式设置为与“Ymd”相同后,异常消失了。我希望这有帮助。

于 2016-03-03T02:08:06.150 回答
1

如果数据库返回带有十进制微时间的日期值,您将收到此错误,如下所示:

2016-10-06 20:16:23.96034

那些额外的十进制数字是问题所在。删除那些,它应该工作。

于 2016-10-13T01:34:36.807 回答
0

通过使用 Eloquent 访问器删除该尾随数据来更正使用包含尾随时区数据的日期:

public function getTimestampColumnAttribute()
{
    return Carbon::createFromFormat($this->dateFormat, strtok($this->attributes['timestamp_column'], '.'));
}
于 2018-05-08T15:31:46.943 回答
0

仅在模型中使用

protected $dateFormat = ' H:i:s.Y-m-du';

要不然

 public function getDateFormat()
 {
     return 'Y-m-d H:i:s.u';
 }

于 2021-07-07T14:14:57.577 回答
0

我总是遇到这个问题,因为环境处理程序的日期不同。我刚刚用这个停止了碳的尾随日期..

public function getDates() { return []; }

于 2018-11-21T13:44:37.117 回答
-1

只需删除此功能:

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

因为已经修复了 published_at 字段的格式...

于 2015-05-10T10:48:19.890 回答
-4

只需下载碳源文件并替换到供应商的碳目录中即可。就是这样...... https://github.com/briannesbitt/Carbon/releases

于 2018-07-15T07:36:37.133 回答