Sql 使用Laravel中的时间戳计算两个日期之间的差异

Sql 使用Laravel中的时间戳计算两个日期之间的差异,sql,laravel,date,timestamp,Sql,Laravel,Date,Timestamp,我在我的表中有一个时间戳,上面有创建的时间戳和更新的时间戳 $table->timestamps(); 但我想添加另一列,计算在创建时与在更新时的差值(以天为单位) 我应该在SQL中还是在我的控制器中执行此操作?使用Carbon计算天数差异 $to = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $created_at); $from = \Carbon\Carbon::createFromFormat('Y-m-d H:i

我在我的表中有一个时间戳,上面有创建的时间戳和更新的时间戳

$table->timestamps();
但我想添加另一列,计算在创建时与在更新时的差值(以天为单位)


我应该在SQL中还是在我的控制器中执行此操作?

使用
Carbon
计算天数差异

   $to = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $created_at);
   $from = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $updated_at);
   $diff_in_days = $to->diffInDays($from);

你可以在你雄辩的模型中做到这一点。 假设您的模型具有名称
User
。 可以通过定义计算字段来创建计算字段

一些解释 通过在
$dates
数组中添加
created_at
updated_at
,Laravel会自动将日期值强制转换为。 现在,如果您在处执行类似于
$user->created_的操作,则不会得到字符串,而是该日期的一个Carbon实例。这允许您进行一些不错的日期计算,如上面的一个

通过使用
getDiffInDaysAttribute
函数添加访问者,您可以像调用普通属性一样,通过
$user->diffInDays
调用天数差异,尽管它不在模型上

但是,如果您现在执行类似于
$user->toArray()
的操作,
diffInDays
属性将不可用。 要在检索用户数据时始终添加天数差异,可以将该字段添加到
$appends
数组中。
这样,当您通过Eloquent检索用户数据时,该字段将始终返回。

要让它在每次更新该模型时自动保存该值,则可以将其放入模型中

公共静态函数boot()
{
父::boot();
静态::更新(函数($model){
$diffInDays=$model->updated\u at->diffInDays($model->created\u at);
$model->timestamp_difference=$diffInDays;
});
}

timestamp_difference
是我使用的DB列的名称,它可以是你想要的任何名称。

你使用过碳立面吗???@AmitSenjaliya没有,我没有使用。你可以尝试下面的答案代码吗???@OthmanBoūlal输出应该是什么,是以分钟、小时还是以天等为单位?@gecko以小时为单位,如果超过24小时,然后在daysIt works中,它计算了差值,但我认为计算不正确,因为,例如,11月1日和11月21日之间的差值为20天,但我的表格显示为18天
class User extends Model 
{
  $dates = [
    'updated_at',
    'created_at'
  ];
  $appends = ['diffInDays'];

  public function getDiffInDaysAttribute()
  {
    if (!empty($this->created_at) && !empty($this->updated_at)) {
      return $this->updated_at->diffInDays($this->created_at);
    }
  }
}