php Laravel日期不允许我使用diffForHumans

7z5jn7bk  于 2022-10-30  发布在  PHP
关注(0)|答案(7)|浏览(159)

我的表设置了一个时间戳字段,用于创建和更新时间字段。
在我的模型中,我这样做:

protected $dates = ['created_at', 'updated_at'];

但在拨打日期时:

$p->created_at->diffForHumans()

我得到

Call to a member function diffForHumans() on string

我很肯定这应该工作。我已经用同样的很多次之前在不同的模型等,但这只是不会工作。

z2acfund

z2acfund1#

默认情况下,Eloquent会将created_at和updated_at列转换为Carbon的示例,Carbon提供了一系列有用的方法,并扩展了本地PHP DateTime类。
请阅读:https://laravel.com/docs/5.1/eloquent-mutators#date-mutators
只需检查您的composer.json文件中是否有nesbot/carbon包。如果您没有,您可以通过键入以下命令安装它

composer require nesbot/carbon

替代解决方案为:
您可以使用Carbon::parse()动态创建对象。

Carbon::parse($p->created_at)->diffForHumans();
mjqavswn

mjqavswn2#

Laravel diffForHumans()函数与我在版本5.2中使用的一样,只有在created_atupdated_at上使用时才能工作,否则会给您带来Call to a member function diffForHumans() on string错误。即使您使用了created_atupdated_at,也要确保在迁移中没有使用:

$table->timestamp('created_at');
$table->timestamp('updated_at');

但你已经用

$table->timestamps();

根据laravel,这是有区别的,但如果出于某种原因,您希望对既不是created_at也不是updated_at的列使用diffForHumans()函数,例如expired_at,请使用Carbon

  • 我能总结的是 *

1.首先在laravel项目文件夹中创建一个名为Addon的新文件夹 * 例如test-laravel*
1.然后在该文件夹中创建一个名为Carbon.php的新文件。
1.在Carbon.php文件中,输入:

namespace Carbon;

class Carbon extends \DateTime{
    //
}

然后转到您的控制器 * 例如ProductController.php *,并将Carbon名称空间添加到该文件:

namespace Addon;
namespace App\Http\Controllers;

use Carbon\Carbon;
use ...

class ProductController extends Controller{
   $expire_date_string = '2016-07-27 12:45:32';
   //  Parse date with carbon
   $carbonated_date = Carbon::parse($expire_date_string);
   //  Assuming today was 2016-07-27 12:45:32
   $diff_date = $carbonated_date->diffForHumans(Carbon::now());
   echo $diff_date; // prints "1 month after"
}

有关碳控制器的更多信息,请访问:http://carbon.nesbot.com/docs/

eqfvzcg8

eqfvzcg83#

对于既不是created_at又不是updated_at的列,您不需要使用Carbon,只需将新列(如expired_at)添加到模型中即可:

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
protected $dates = [
    'created_at',
    'updated_at',
    'deleted_at',
    'expired_at'
];

然后你可以使用-〉diffForHumans();
https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

roejwanj

roejwanj4#

如果在刀片视图中:

{{ \Carbon\Carbon::parse($post->created_at)->diffForHumans() }}
xfb7svmp

xfb7svmp5#

您必须使用Carbon,如下所示:

$date = new \Carbon($p->created_at)->diffForHumans();
i2byvkas

i2byvkas6#

仅在“查看文件”中使用此选项:

$p->created_at->diffForHumans();


1.确认created_at字段不能为空
1.如果为空,则使用类似if (condition)的条件
1.在模型文件中不需要使用protected $dates = ['created_at', 'updated_at'];

ki1q1bka

ki1q1bka7#

你可以不需要碳。在laravel 8,添加在控制器此行:
protected $dates = [ '创建时间','更新时间',];
比刀片式服务器所能使用的要多:{{ $project-〉创建时间-〉人类差异()}}

相关问题