İki Karbon Zaman Damgası nasıl karşılaştırılır?


85

Oluşturduğum ve oluşturduğum edited_at (Laravel's) olmak üzere iki zaman damgam var ... Veritabanında, her ikisinin de tür zaman damgası ve varsayılan değeri 0000-00-00 00:00:00 ... Ama

var_dump(edited_at variable)ip veriyor. var_dump(created_at variable)Nesne / Karbon iken . Bu zaman damgalarının nesi yanlış?

Format ('U') kullanarak tamsayıya dönüştürdükten sonra ikisini de karşılaştırmalıyım. Bu yöntemi yalnızca Carbon Object üzerinde arayabilirim. Bunu nasıl yapabilirim?


Tam olarak neyi karşılaştırmak istiyorsun? hangisinin daha eski / daha yeni olduğunu bilmek ister misiniz?
lukasgeiter

evet, daha eski / daha yeni kamp yapmak istiyorum
Hassan Saqib

Yanıtlar:


196

İlk olarak, Eloquent, zaman damgalarını ( created_at, updated_at) otomatik olarak karbon nesnelerine dönüştürür. Bu updated_atgüzel özelliği elde etmek için kullanabilir veya mülkte edited_atmodelinizde belirtebilirsiniz $dates:

protected $dates = ['edited_at'];

Şimdi asıl sorunuza geri dönün. Carbon'un birçok karşılaştırma işlevi vardır:

  • eq() eşittir
  • ne() eşit değil
  • gt() daha büyük
  • gte() büyüktür veya eşittir
  • lt() daha az
  • lte() küçüktür veya eşittir

Kullanım:

if($model->edited_at->gt($model->created_at)){
    // edited at is newer than created at
}

2
Saati değil, yalnızca tarihleri ​​nasıl karşılaştırabilirim?
geckob

3
@geckob Muhtemelen en kolayı yapmak$date1->toDateString() == $date2->toDateString()
lukasgeiter

Test ediyorum ve karbon nesnelerini karşılaştırmak için karşılaştırma operatörlerini kullanmak mümkün. Bu yeni bir özellik mi?
JCarlosR

Bunu kullanırken, boş değer atanabilir zaman damgalarını işlemeyi unutmayın. Laravel, SQL'i bir Carbon nesnesi yerine nullbir PHP'ye dönüştürür ve nullelde edersiniz call to a member function lt() on null.
okdewit

$ some_cabron_date-> endOfDay () veya $ some_cabron_date-> startOfDay () işlevlerini istediğiniz işlem için kullanmalısınız
Williaan Lopes

21

Carbon, anımsatıcı adlara sahip bir dizi karşılaştırma işlevine sahiptir :

  • eşittir()
  • eşit değil()
  • büyükThan ()
  • greatThanOrEqualTo ()
  • daha az()
  • lessThanOrEqualTo ()

Kullanım:

 if($model->edited_at->greaterThan($model->created_at)){
     // edited at is newer than created at
 }

Nesbot / carbon 1.36.2 için geçerli

Hangi Carbon sürümünü kullandığınızdan emin değilseniz, bunu çalıştırın

$composer show "nesbot/carbon"

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


3

İlk olarak , bu cevapta açıklandığı gibi yerleşik belagatlı işlevselliği kullanarak zaman damgasını dönüştürün .

O zaman karşılaştırma için Carbon min()veya max()işlevini kullanabilirsiniz . Örneğin:

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

Bu, echobu durumda iki tarihin daha azı olacaktır $dt1.

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


1

Şimdi 2 tarihi () ve tablodan bir tarihi nasıl karşılaştırıyorum

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

Doğru çalışmalı. Carbon tarafından sağlanan karşılaştırma işlevlerini kullandım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.