如何比较两个碳时间戳?

问题描述 投票:42回答:4

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

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

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

laravel laravel-5 php-carbon
4个回答
121
投票

首先,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
}

3
投票

Carbon有一堆带有助记名称的比较函数:

  • 等于()
  • notEqualTo()
  • 比...更棒()
  • greaterThanOrEqualTo()
  • 少于()
  • 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"

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/


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

我无法使用这些方法,希望它可以帮助别人。

© www.soinside.com 2019 - 2024. All rights reserved.