web-dev-qa-db-ja.com

2つのカーボンタイムスタンプを比較する方法は?

私は2つのタイムスタンプ、edited_atを作成し、created_at(Laravel's)...を持っています...

var_dump(edited_at variable)は文字列を提供しています。 var_dump(created_at variable)はオブジェクト/カーボンです。これらのタイムスタンプの何が問題になっていますか?

Format( 'U')を使用して整数に変換した後、両方を比較する必要があります。このメソッドはCarbonオブジェクトでのみ呼び出すことができます。どうやってやるの?

51
Hassan Saqib

まず、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
}
127
lukasgeiter

Carbonには多数の比較関数がありますニーモニック名

  • に等しい()
  • notEqualTo()
  • greaterThan()
  • 以上()
  • 未満()
  • 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"
4

最初に、 この回答では の説明に従って、組み込みの雄弁機能を使用してタイムスタンプを変換します。

次に、比較のために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);

これは、2つの日付のうち小さい方をechoします。この場合は$dt1です。

http://carbon.nesbot.com/docs/ を参照してください

1
ginna

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

私はこれらの方法を使用できませんでした。他の人の助けになることを願っています。

0
fayz