Wie vergleiche ich zwei Carbon Timestamps?


83

Ich habe zwei Zeitstempel, editiert_at, die ich erstellt habe, und erstellt_at (Laravel's) ... In der Datenbank haben beide den Typ Zeitstempel und den Standardwert 0000-00-00 00:00:00 ... Aber

var_dump(edited_at variable)gibt Zeichenfolge. Während var_dump(created_at variable)ist Objekt / Kohlenstoff. Was ist los mit diesen Zeitstempeln?

Ich muss beide vergleichen, nachdem ich mit dem Format ('U') in eine Ganzzahl konvertiert habe. Ich kann diese Methode nur für Carbon Object aufrufen. Wie kann ich das machen?


Was genau möchten Sie vergleichen? Möchten Sie wissen, welche älter / neuer ist?
Lukasgeiter

Ja, ich möchte älter / neuer
campen

Antworten:


189

Zunächst konvertiert Eloquent seine Zeitstempel ( created_at, updated_at) automatisch in Kohlenstoffobjekte. Sie können einfach verwenden updated_at, um diese nette Funktion zu erhalten, oder edited_atin Ihrem Modell in der $datesEigenschaft angeben :

protected $dates = ['edited_at'];

Nun zurück zu Ihrer eigentlichen Frage. Carbon hat eine Reihe von Vergleichsfunktionen:

  • eq() gleich
  • ne() nicht gleich
  • gt() größer als
  • gte() größer oder gleich
  • lt() weniger als
  • lte() kleiner oder gleich

Verwendung:

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

2
Wie kann ich nur die Daten und nicht die Uhrzeit vergleichen?
Geckob

3
@geckob Das einfachste ist wahrscheinlich zu tun$date1->toDateString() == $date2->toDateString()
lukasgeiter

Ich teste und es ist möglich, die Vergleichsoperatoren zu verwenden, um Kohlenstoffobjekte zu vergleichen. Ist es eine neue Funktion?
JCarlosR

Denken Sie bei dieser Verwendung daran, nullbare Zeitstempel zu verarbeiten. Laravel konvertiert nur SQL nullin ein PHP nullanstelle eines Carbon-Objekts, und Sie erhalten call to a member function lt() on null.
Okdewit

Sie sollten $ some_cabron_date-> endOfDay () oder $ some_cabron_date-> startOfDay () mit diesen Funktionen für die gewünschte Operation verwenden
Williaan Lopes

21

Carbon hat eine Reihe von Vergleichsfunktionen mit mnemonischen Namen :

  • gleich()
  • Nicht gleichzusetzen mit()
  • größer als()
  • größer als oder gleich wie()
  • weniger als()
  • weniger als oder gleich()

Verwendung:

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

Gültig für Nesbot / Carbon 1.36.2

Wenn Sie nicht sicher sind, auf welcher Carbon-Version Sie sich befinden, führen Sie diese aus

$composer show "nesbot/carbon"

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


3

Konvertieren Sie zunächst den Zeitstempel mithilfe der integrierten beredten Funktion, wie in dieser Antwort beschrieben .

Dann können Sie einfach Carbon's min()oder die max()Funktion zum Vergleich verwenden. Zum Beispiel:

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

Dies ist echodas kleinere der beiden Daten, was in diesem Fall der Fall ist $dt1.

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


1

So vergleiche ich 2 Daten, jetzt () und ein Datum aus der Tabelle

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

Sollte genau richtig funktionieren. Ich habe die Vergleichsfunktionen von Carbon verwendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.