我有两个时间戳,我创建的edited_at和created_at(Laravel's)...... 在数据库中,两者都有类型时间戳和默认值0000-00-000000:00:00 ......但是
var_dump(edited_at variable)
正在给字符串。虽然var_dump(created_at variable)
是对象/碳。这些时间戳有什么问题?
我必须在使用格式('U')转换为整数后比较两者。我只能在Carbon Object上调用这个方法。我怎么能这样做?
答案 0 :(得分:110)
首先,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
}
答案 1 :(得分:2)
碳有很多比较功能带有助记符的名称:
用法:
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"
答案 2 :(得分:1)
首先,使用内置的雄辩功能转换时间戳,如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
。
答案 3 :(得分:1)
这就是我比较2个日期, now()和表格中的日期的方式
@if (\Carbon\Carbon::now()->lte($item->client->event_date_from))
.....
.....
@endif
应该工作正常。 我已经使用了Carbon提供的比较功能。
答案 4 :(得分:0)
扩展@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())
我无法使用这些方法,希望对其他人有帮助。