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?

Hassan Saqib
quelle
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
}
lukasgeiter
quelle
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

Jewgenij Afanasjew
quelle
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/

Ginna
quelle
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.

Hackernewbie
quelle