2017-12-22 4 views
2

Ich denke, ich habe eine relativ einfache Frage, ich denke nur, dass ich einen Aspekt davon missverstanden habe.Laravel und Carbon - DiffInDays Wenn Aussage

Ich habe eine Indexseite, wo in einer der Tabellenzellen ich eine if-Anweisung haben:

@if (Carbon\Carbon::parse($shipment->due_date)->diffInDays(false) > 0 && Carbon\Carbon::parse($shipment->due_date)->diffInDays(false) < 10) 

Wo die Falschen sind, wo ich möchte, dass erklären, wenn der Tag in der Zukunft, sagen Wie morgen im Vergleich zu heute, werde ich eine -1 zurückgeben, während ich, wenn ich mich auf gestern beziehen werde, eine 1 zurückgeben werde.

Das Problem ist, ich versuche, die Dokumentation zu verwenden, aber sie stehen Schlange, egal für mich, welche Art und Weise ich versuche, sie: http://carbon.nesbot.com/docs/#api-humandiff

aber ich, dass auf dem gleichen Layout erwähnen sollte ich das tun kann:

{{Carbon\Carbon::parse($shipment->due_date)->diffInDays()}} 

und gibt die Anzahl der Tage in der Vergangenheit oder Zukunft (auch wenn beide positiv sind), so kenne ich die oben genannten Arbeiten (in einer Art und Weise, aber ich muß noch die positive oder negative erwähnt).

Antwort

3

Sie müssen ein Carbon-Datum als ersten Parameter für diffInDays() angeben. So wird die Logik sein:

Carbon\Carbon::parse($shipment->due_date)->diffInDays(now(), false) 

Oder:

now()->diffInDays(Carbon\Carbon::parse($shipment->due_date), false) 

Je nachdem, was genau Sie versuchen zu erreichen.

false als zweiter Parameter bewirkt, dass die Methode einen vorzeichenbehafteten Wert zurückgibt (positiv oder negativ).

0

Sie können:

Carbon\Carbon::parse($shipment->due_date)->diffInDays(null, false) 

anstelle von

Carbon\Carbon::parse($shipment->due_date)->diffInDays(false) 

Dies ist becuase Methodensignatur sieht wie folgt aus:

public function diffInDays(Carbon $dt = null, $abs = true) 
{ 
    $dt = $dt ?: static::now($this->getTimezone()); 

    return (int) $this->diff($dt, $abs)->format('%r%a'); 
} 

Zusätzlich zu Ihrer Logik suchen finde ich es zu kompliziert. Ich denke, es wäre genug, um zu verwenden:

@if (Carbon\Carbon::parse($shipment->due_date)->diffInDays(null, false) < 10) 

die erste Bedingung nicht notwendig ist, ich

Auch im Fall glauben Sie verwenden Laravel 5.5 sollten Sie lieber verwenden:

Illuminate\Support\Carbon 

statt

Carbon\Carbon 

für den Fall, dass Sie einige benutzerdefinierte Methoden zu dieser Klasse hinzufügen möchten.