我有两个时间戳,我创建的edited_at和created_at(Laravel's)...在数据库中,两者都有类型时间戳和默认值0000-00-0000B 00:00 ...但是
var_dump(edited_at variable)
正在给字符串。而var_dump(created_at variable)
是对象/碳。这些时间戳有什么问题?
我必须在使用格式('U')转换为整数后比较两者。我只能在Carbon Object上调用这个方法。我怎样才能做到这一点?
首先,Eloquent自动将其时间戳(created_at
,updated_at
)转换为碳对象。您可以使用updated_at
来获得这个不错的功能,或者在edited_at
属性中指定模型中的$dates
:
protected $dates = ['edited_at'];
现在回到你的实际问题。 Carbon有一堆比较功能:
eq()
等于ne()
不等于gt()
大于gte()
大于或等于lt()
不到lte()
小于或等于用法:
if($model->edited_at->gt($model->created_at)){
// edited at is newer than created at
}
Carbon有一堆带有助记名称的比较函数:
用法:
if($model->edited_at->greaterThan($model->created_at)){
// edited at is newer than created at
}
适用于nesbot / carbon 1.36.2
如果您不确定自己的Carbon版本,请运行此版本
$composer show "nesbot/carbon"
首先,使用内置的雄辩功能转换时间戳,如in this answer所述。
然后你可以使用Carbon的min()
或max()
函数进行比较。例如:
$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);
$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $dt1->min($dt2);
这将echo
两个日期中较小的一个,在这种情况下是$dt1
。
延伸@lukasgeiter答案,方法eq()
,ne()
,gt()
,gte()
,lt()
,lte()
不仅比较day
,但它也看看time
和timezone
>> $date->toArray();
{
"year": 2019,
"month": 2,
"day": 23,
"dayOfWeek": 6,
"dayOfYear": 53,
"hour": 7,
"minute": 39,
"second": 52,
"micro": 849616,
"timestamp": 1550907592,
"formatted": "2019-02-23 07:39:52",
"timezone": {
"timezone_type": 3,
"timezone": "UTC"
}
}
时区可以调整为Carbon::parse($stringDate, new DateTimeZone('Asia/Dubai'))
只比较一天
$date1->startOfDay()->eq($date2->startOfDay())
我无法使用这些方法,希望它可以帮助别人。