2016-06-21 10 views
0

wollte nur doppelt überprüfen und stellen Sie sicher, dass meine Linie des Denkens korrekt ist. Dieser Hook läuft alle 48 Stunden, also muss ich prüfen, ob heute oder morgen ein Event stattfindet.Mehrere Operatoren in PHP If Anweisung

$now = date('Y/m/d'); 
$today = explode("/", $now); 

Das Startdatum des Ereignisses hat das gleiche Format, aber der Wert variiert und wird auf die gleiche Weise gespeichert.

if ($today[1] == $eventDate[1] && 
(intval($today[2]) == (intval($eventDate[2]-1)) || (intval($today[2]) == intval($eventDate[2])-2))) { 

//run code 

} 
+1

'$ today' ist eine Zeichenkette. '$ today [2]' zieht den dritten Wert dieser Zeichenkette, also den dritten Wert des Jahres. '$ today [1]' zieht den zweiten Wert. – chris85

+0

Ah, tut mir leid, ich habe vergessen, eine Zeile zu kopieren. Bitte sehen Sie edit –

+2

Warum nicht den Code ausführen und sehen, ob es wie geplant funktioniert? – Epodax

Antwort

0

Meiner Meinung nach, sollten Sie überlegen, mit DateTime-Objekten:

$today = new \DateTime(); 
$eventDateTime = \DateTime::createFromFormat('Y/m/d', $eventDate); 

if ($today->format('d-m-Y') === $eventDateTime->format('d-m-Y')) { 
    ... 
} 

Wenn Sie, dass ein Ereignis heute geschieht überprüfen möchten oder morgen, Sie möchten dies tun könnte:

$start = new \DateTime(); 
$start->setTime(0,0,0); 
$end = new \DateTime(); 
$end->add(new \DateInterval('P1D')); 
$end->setTime(23,59,59); 
$eventDateTime = \DateTime::createFromFormat('Y/m/d', $eventDate); 

if ($eventDateTime >= $start && $eventDateTime <= $end) { 
    ... 
} 

Auf diese Weise überprüfen Sie, ob ein Datum in einem bestimmten Zeitraum ist. Hier habe ich 1 Tag zum aktuellen Datum hinzugefügt, aber Sie können den Code anpassen und mehr als 1 Tag einstellen, wenn Sie möchten.

+0

Würde nicht nur der Code ausgeführt, wenn das heutige Datum mit dem Ereignisdatum übereinstimmt? Ich mache mir mehr Sorgen um die verschiedenen Bedingungen, unter denen der Code ausgeführt werden kann, wenn das heutige Datum am Vortag oder zwei Tage vor dem Ereignis liegt. –

+0

Danke. Können Sie mir sagen, welche Vorteile die Verwendung eines DateTime-Objekts gegenüber der Methode von date() hat, die ich verwendet habe? Nicht kritisch, wirklich nur neugierig! –

+0

Ich denke, das ist besser lesbar, da Sie direkt mit Datumsangaben arbeiten, anstatt Strings, die eigentlich Datumsangaben sein sollen, aber Sie können sich nicht sicher sein, es ist mehr testbar. Wenn Sie ein DateTime-Objekt verwenden, können Sie es auch in vielen verschiedenen Formaten anzeigen. Ich finde es klarer, $ date-> format ('Y') zu machen, als einen String zu explodieren, um die dritte Spalte eines Arrays anzuzeigen. – jiboulex