113

我有两个时间戳,我创建的edited_at和created_at(Laravel的)......在数据库中,两者都有类型时间戳和默认值0000-00-00 00:00:00......但是

var_dump(edited_at variable)正在给字符串。虽然var_dump(created_at variable)是对象/碳。这些时间戳有什么问题?

在使用格式('U')转换为整数后,我必须比较两者。我只能在 Carbon Object 上调用此方法。我怎样才能做到这一点?

4

4 回答 4

248

首先,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
}
于 2015-04-16T19:34:07.297 回答
39

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"

文档: https ://carbon.nesbot.com/docs/#api-comparison

于 2019-03-26T21:31:06.853 回答
4

首先,使用内置的 eloquent 功能转换时间戳,如本答案中所述。

然后您可以使用 Carbon 的min()ormax()函数进行比较。例如:

$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0); $dt2 = Carbon::create(2014, 1, 30, 0, 0, 0); echo $dt1->min($dt2);

这将echo是两个日期中较小的一个,在这种情况下是$dt1.

http://carbon.nesbot.com/docs/

于 2016-07-14T23:56:49.427 回答
2

这就是我比较 2 个日期的方式,now()和表中的一个日期

@if (\Carbon\Carbon::now()->lte($item->client->event_date_from))
    .....
    .....
@endif

应该工作得恰到好处。我使用了 Carbon 提供的比较函数。

于 2020-08-23T09:12:58.783 回答