2014-12-04 147 views
0

我正在嘗試這一個,它已經有一段時間,因爲我上次用PHP編碼。檢查日期是否在特定的日期範圍PHP

我有檢查,如果給定的日期是在日期的範圍之間的功能:

pr($this->isDateBetween("2014-11-15", "2014-12-05", "2014-06-14")); 

public function isDateBetween($dt_start, $dt_check, $dt_end){ 
     if(strtotime($dt_check) >= strtotime($dt_start) && strtotime($dt_check) <= strtotime($dt_end)){ 
      return true; 
     } else{ 
      return false; 
     } 
    } 

但是好像我越來越false。預期結果應該是true,因爲2014-12-05小於2014-06-14

十二月份是不是比六月份這樣應該是真的?

另外, 當我將2014-06-14更改爲2014-12-14它成爲現實。

對不起,我沒有用PHP更新。請多多包涵。

編輯

試圖將那些的strtotime,但仍然得到錯誤的結果

+2

你應該找出哪個'dt_start'和'dt_end'是最大/最小的,然後做一個IF語句。您現在的做法是,您指定參數的順序意味着不接受日期。例如'2014-11-15'是你的開始日期,但是**'2015-06-14'之後是**,這是你的結束日期。 – Jonathon 2014-12-04 17:18:46

+0

此外,中間參數即您檢查的日期超出了其他參數指定的範圍。 – Jonathon 2014-12-04 17:23:25

+0

謝謝我很困惑。我需要以艱苦的方式學習日期,但不要提前考慮 – 2014-12-04 17:24:23

回答

0

的解決方案存在的位置:

How to check if a date is in a given range?

SOLUTION:

的轉換米到時間戳是一種行之有效的方法,使用時間戳,例如時間戳。

$start_date = '2009-06-17'; 

$end_date = '2009-09-05'; 

$date_from_user = '2009-08-28'; 

check_in_range($start_date, $end_date, $date_from_user); 


function check_in_range($start_date, $end_date, $date_from_user) 
{ 
    // Convert to timestamp 
    $start_ts = strtotime($start_date); 
    $end_ts = strtotime($end_date); 
    $user_ts = strtotime($date_from_user); 

    // Check that user date is between start & end 
    return (($user_ts >= $start_ts) && ($user_ts <= $end_ts)); 
} 
+0

沒錯。 OP的問題似乎是你的鏈接文章的重複。 – 2014-12-04 18:04:33

0

,因爲2014年12月5日低於2014年6月14日預期的結果應該是真實的。

完全錯誤。代碼IS正在工作。 6月14日比12月12日「少」。所以你的12月12日的日期是不是之間的開始/結束日期。它已經超過了範圍的最後。

+0

我對年終事物感到困惑,並且提前思考。你是對的。 – 2014-12-04 17:23:46

0

預期結果應該爲真,因爲2014-12-05小於2014-06-14。

絕對不是。預期結果不是true。它是false,因爲"2014-12-05"不小於"2014-06-14"。十二月比六月少?從來沒有聽說過這種奇特的邏輯。

此外,當我將2014-06-14更改爲2014-12-14時,它成爲現實。

這是正確的。由於"2014-12-05"肯定小於"2014-12-14",因此它是true5 December明顯小於14 December

這與PHP版本或PHP內置方法無關。這完全是關於你的邏輯。

我認爲這是你在找什麼:

pr($this->isDateBetween("2014-06-14", "2014-11-15", "2014-12-05")); 

public function isDateBetween($dt_start, $dt_check, $dt_end){ 
     if(strtotime($dt_check) >= strtotime($dt_start) && strtotime($dt_check) <= strtotime($dt_end)){ 
      return true; 
     } else{ 
      return false; 
     } 
} 

這將返回true