2016-05-12 127 views
0

我需要在一個或多個工作日內安排一項週期性任務,每隔X周發生一次。 例如每三週,星期四和星期六。如何計算(日曆)星期之間的PHP差異?

通常情況下,如果任務每週只發生一次,那麼我可以計算出今日與事件觸發的最後一天之間的天數差,再除以7得到周差。由於該任務可能每週運行數次,因此我無法使用此方法。

我的想法是計算的差異日曆周之間並使用該值來確定是否計劃任務應在本週執行:

$lastCW = date('W', strtotime($last_trigger_date)); 
$currentCW = date('W'); 
$cwDifference = $currentCW - $lastCW; 

if (($cwDifference == $repeat_interval) || ($cwDifference == 0)) { 
    // run some code 
} 

此代碼工作正常時,這兩個日期在同一年,但是當間隔跨越兩年並且日曆周差變爲負時存在問題。

處理這個問題的最佳方法是什麼?

+0

使用http://php.net/manual/en/datetime.modify.php'$日期 - >修改('+ 1周')' –

+0

你不應該將它們轉換爲日期直到結束。您應該在最後幾周的unix時間戳之前減去當前周的unix時間戳。 – Derek

回答

1

我總是在我所有的項目中都包含nestbot/carbon包。在PHP中處理日期是一種更簡單,更簡潔的方式。實際上,它擴展了PHP DateTime類,所以您甚至可以將它與vanille DateTime對象一起使用。

您的片段應該是這樣的。如果你是使用碳:

$now = new Carbon(); 
$previous = new Carbon($last_trigger_date); 

if ($now->diffInWeeks($previous) == $repeat_interval) { 
    // do your thing 
}