【问题标题】:Format created_at datetime using Carbon and display result in laravel blade使用 Carbon 格式化 created_at 日期时间并在 laravel 刀片中显示结果
【发布时间】:2017-08-14 20:52:15
【问题描述】:

我正在尝试在我的 laravel 刀片文件中使用 Carboncreated_at 日期时间显示为 a minute ago。我使用vue.js 显示数据但不工作。

控制器:

public function data()
    {
        $projects = Project::get();
        return [
            'created' => $projects->created_at->diffForHumans()
        ];
        return \Response::json($projects);
    }

vue 刀片:

<tr v-for="Project in Projects">
     <td>@{{ Project.id }}</td>
     <td>@{{ Project.thumb }}</td>
     <td>@{{ Project.name }}</td>
     <td>@{{ Project.active }}</td>
     <td>@{{ Project.created_at }}</td>
</tr>

错误:

未定义属性:Illuminate\Database\Eloquent\Collection::$created_at

我也试过了:

foreach ($projects as $project) {
     return [
          'created' => $project->created_at->diffForHumans()
     ];
}

它会显示我正在寻找的内容,但它只显示一个数据。

【问题讨论】:

    标签: vue.js laravel-5.3 php-carbon


    【解决方案1】:

    您直接在刀片中编写以获得人类可读的格式。

    {{\Carbon\Carbon::createFromTimeStamp(strtotime($Project.created_at))->diffForHumans()}}
    

    【讨论】:

      【解决方案2】:

      我得到了你可以在任何地方使用的具有强制转换属性的解决方案。检查下面的代码

      <?php
      
      namespace App\Casts;
      
      use Carbon\Carbon;
      use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
      
      class CreateAtCast implements CastsAttributes
      {
          /**
           * Transform the attribute from the underlying model values.
           *
           * @param  \Illuminate\Database\Eloquent\Model  $model
           * @param  string  $key
           * @param  mixed  $value
           * @param  array  $attributes
           * @return mixed
           */
          public function get($model, string $key, $value, array $attributes)
          {
              $date = Carbon::parse($value)->diffForHumans();
              return $date;
          }
      
          /**
           * Transform the attribute to its underlying model values.
           *
           * @param  \Illuminate\Database\Eloquent\Model  $model
           * @param  string  $key
           * @param  mixed  $value
           * @param  array  $attributes
           * @return array
           */
          public function set($model, string $key, $value, array $attributes)
          {
              return $value;
          }
      }
      
      

      在模态中

      
      <?php
      
      namespace App;
      
      use App\Casts\CreateAtCast;
      
      class Project extends Model
      {
      
          protected $casts = [
              'created_at'        => CreateAtCast::class,
          ];
      
          protected $dates = ['created_at', 'updated_at'];
      }
      
      
      

      然后直接使用project.create_at

      【讨论】:

        【解决方案3】:

        我不喜欢格式化 create_at 本身,而是在你的模型中创建它的副本,并随时使用它。

        所以在你的User.php 模型中:

        protected $appends = ['created_date'];
        

        创建一个属性修改器:

        public function getCreatedDateAttribute()
        {
            return $this->created_at->diffForHumans();
        }
        

        样本输出

        10 seconds ago
        

        【讨论】:

          猜你喜欢
          • 2020-06-30
          • 2016-02-28
          • 2016-03-24
          • 2017-04-21
          • 1970-01-01
          • 2018-03-13
          • 2016-12-01
          • 1970-01-01
          • 2021-11-30
          相关资源
          最近更新 更多