web-dev-qa-db-de.com

Wie vergleiche ich zwei Carbon Timestamps?

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

var_dump(edited_at variable) gibt einen String aus. Während var_dump(created_at variable) Objekt/Kohlenstoff ist. Was stimmt mit diesen Zeitstempeln nicht?

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

51
Hassan Saqib

Zunächst konvertiert Eloquent seine Zeitstempel (created_at, updated_at) Automatisch in Kohlenstoffobjekte. Sie können einfach updated_at Verwenden, um diese nette Funktion zu erhalten, oder edited_at In Ihrem Modell in der Eigenschaft $dates Angeben:

protected $dates = ['edited_at'];

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

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

Verwendung:

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

Carbon hat eine Reihe von Vergleichsfunktionen mit mnemonischen Namen:

  • gleicht()
  • nicht gleichzusetzen mit()
  • größer als()
  • größer als oder gleich wie()
  • weniger als()
  • gleich oder kleiner als()

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"
4

Konvertieren Sie zunächst den Zeitstempel mit der integrierten eloquenten Funktionalität, wie in in dieser Antwort beschrieben.

Dann können Sie zum Vergleich einfach die Funktion min() oder max() von Carbon verwenden. Beispielsweise:

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

Dies wird echo das kleinere der beiden Daten sein, in diesem Fall $dt1.

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

1
ginna

erweiterung auf @ lukasgeiter Antwort, die Methoden eq(), ne(), gt(), gte(), lt(), lte() vergleicht nicht nur day, sondern betrachtet auch time und 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"
  }
}

Zeitzone kann eingestellt werden als Carbon::parse($stringDate, new DateTimeZone('Asia/Dubai'))

um nur den tag zu vergleichen

$date1->startOfDay()->eq($date2->startOfDay())

ich konnte diese Methoden nicht verwenden, hoffe, es hilft jemand anderem.

0
fayz