2011-11-03 53 views
1

我的想法似乎在這一個空白。檢查當前日期是否在2日期之間的有效方法(年份無關緊要)

我必須寫點東西來找出今天的日期/月份組合適合哪些日期範圍。

我有日期範圍設定量,它們是:

$dateRanges = array(
    1 => "16 January to 30 April", 
    2 => "1 May to 30 June", 
    3 => "1 July to 15 August", 
    4 => "16 August to 15 September", 
    5 => "15 September to 15 October", 
    6 => "16 October to 15 January" 
); 

所有我試圖返回是當前日期適合範圍的數組鍵。

現在所有的事情都經過我的頭腦,我將不得不建立一個大的if語句來查看當前的date('j')date('n')並匹配結果。但肯定這很麻煩,而且效率不高?

任何想法更好的方法來解決這個問題將不勝感激!

回答

5
$today = time(); 
foreach ($dateRanges as $key => $range) { 
    list($start, $end) = explode(' to ', $range); 
    $start .= ' ' . date('Y'); // add 2011 to the string 
    $end .= ' ' . date('Y'); 
    if ((strtotime($start) <= $today) && (strtotime($end) >= $today)) { 
     break; 
    } 
} 

$關鍵將是匹配的日期範圍的任索引,或者null /假。

0

創建用於數組中的值的DateTime實例UND使用簡單的比較操作符等>和<

0

只需使用strtotime創建一個UNIX紀元,然後使用內置的<>運算符。

http://www.php.net/manual/en/function.strtotime.php

$time_min = strtotime("17 January 2011"); 
$time_max = strtotime("30 April 2011"); 
if ($time >= $time_min && $time < $time_max) 
{ 
    echo "Time is within range!"; 
} 

然後,您可以只擴展爲使用指定範圍的數組。

+0

你將如何得到' $時間'在一個很好的方式? – dmackerman

+1

當前時間?只需使用['time()'](http://php.net/manual/en/function.time.php)。 – Polynomial

2

這是馬克B的回答的變化,但把這個變成純數字的比較變得更加高效:

function get_today() { 
    $dateRanges = array(
    0 => 116, // 16th Jan 
    1 => 501, // 1st May 
    2 => 701, // 1st July ..etc.. 
    3 => 816, 
    4 => 916, 
    5 => 1016 
); 
    $today = (int) date('nd'); 
    foreach ($dateRanges as $key => $date) { 
    if ($today < $date) { 
     $result = $key; 
     break; 
    } 
    } 
    return (empty($result)) ? 6 : $result; 
} 

返回一個整數符合採樣陣列中的按鍵

相關問題