如何比较两个碳时间戳?

时间:2015-04-16 19:21:17

标签: laravel laravel-5 php-carbon

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

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

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

5 个答案:

答案 0 :(得分:110)

首先,Eloquent会自动将其时间戳(created_atupdated_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)

碳有很多比较功能带有助记符的名称

  • equalTo()
  • notEqualTo()
  • greaterThan()
  • greaterThanOrEqualTo()
  • lessThan()
  • lessThanOrEqualTo()

用法:

 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

请参阅http://carbon.nesbot.com/docs/

答案 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,但同时也会查看timetimezone

>> $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())

我无法使用这些方法,希望对其他人有帮助。