2016-11-16 81 views
-1

有很多SO問題向您展示如何檢查日期時間是否在一個範圍內,但沒有太多的幫助當您想要重複進行並且日期範圍跨越一天以上時。PHP當範圍跨越一天以上時,重新檢查時間是否在範圍內

作爲一個例子,你如何檢查它是否在星期二22:00到星期三07:30?那周你怎麼做那一週?

+0

請[編輯]你的問題,以顯示[你有什麼到目前爲止已經試過(HTTP:/ /whathaveyoutried.com)。您應該包含您遇到問題的代碼[mcve],然後我們可以嘗試幫助解決特定問題。你還應該閱讀[問]。 –

+0

@TobySpeight如果我把我所嘗試過的方法問一個答案,我自己的問題是有道理的[正如所鼓勵的那樣](https://stackoverflow.blog/2011/07/its-ok-to-ask-and-回答你自己的問題/)無論如何,「你將如何檢查它是否在星期二的22:00到接下來的星期四的07:30之間?」似乎是最小的,完整的和可驗證的。我注意到你的「你到目前爲止所嘗試的」鏈接不在現場,你能指出任何SO指導嗎? – Dom

回答

1

PHP的DataTime類的構造函數接受相對參數this xxxday,它可以用來給你相對於當前時間的下一個'xxxday'。

因此,例如,new DateTime('next friday')將爲您提供一個日期時間對象,表示下一個星期五相對於當天的00:00:00。如果當天的星期五,那麼這是將返回的日期。

所以,如果你定義

$end = new DateTime(next thursday 07:30); 

然後$end是當今表示對下週二22:00從當前時間,或20:00如果今天是星期二DateTime對象。然後可以採取間隔關閉端從當前時間之前獲得與

$start = clone $end; 
$start = $end->sub(new DateInterval('P1DT9H30M')); 

它給你DateTime對象1天,9小時30分鐘開始到07:30在星期四,或在當前時間下週四前的星期二22:00。

然後你就可以獲取當前日期時間,看看是否開始和結束日期時間之間的:

$now = new DateTime(); 
if($now >= $start && $now <= $end) { 
    //In interval 
} 
相關問題