2016-06-21 32 views
0

只是想仔細檢查並確保我的思路是正確的。這個鉤子每48小時運行一次,所以我需要檢查今天或明天是否發生事件。PHP中的多個操作符如果聲明

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

事件開始日期具有相同的格式,但值不同,並以相同的方式存儲。

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

//run code 

} 
+1

'$ today'是一個字符串。 '今日$ [2]'正在拉動該字符串的第三個值,因此是今年的第三個值。 '今日$ [1]'拉第二個價值。 – chris85

+0

啊,對不起,我忘了複製一行。請參閱編輯 –

+2

爲什麼不執行代碼並查看它是否按預期工作? – Epodax

回答

0

在我看來,你應該考慮DateTime對象的工作:

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

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

如果你想檢查的事件今天或明天發生的事情,你可以這樣做:

$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) { 
    ... 
} 

這樣你檢查一個日期是否在一定的時期。在這裏,我在當前日期添加了1天,但如果需要,您可以修改代碼並設置超過1天。

+0

如果今天的日期與事件日期相匹配,那麼這隻會運行代碼嗎?如果今天的日期是前一天或事件前兩天,我更擔心運行代碼的多個條件。 –

+0

謝謝。你能告訴我使用DateTime對象與我使用的date()方法的好處是什麼?不重要,真的只是好奇! –

+0

我認爲這是更具可讀性的,因爲您直接使用日期而不是字符串,而這些字符串應該是日期,但您無法確定它的性質,因此它更易於測試。擁有DateTime對象還可以讓您以多種不同的格式顯示它。我發現做$ date-> format('Y')比分解字符串來顯示數組的第三列更清晰。 – jiboulex