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);
}
}
}