2011-11-24 91 views
0

我有一個像下面多維數組發現兩個日期

array(
    "hgfh" => array("s" => "2011-11-28T07:00-04:00", "e" => "2011-11-29T06:59-04:00"), 
    "hgfh" => array("s" => "2011-11-29T07:00-04:00", "e" => "2011-11-30T06:59-04:00"), 
    "hgfh" => array("s" => "2011-11-30T07:00-04:00", "e" => "2011-12-01T06:59-04:00"), 
    "hgfh" => array("s" => "2011-12-01T07:00-04:00", "e" => "2011-12-02T06:59-04:00"), 
    "hgf"  => array("s" => "2011-12-02T07:00-04:00", "e" => "2011-12-05T06:59-04:00"), 
    "sog"  => array("s" => "2011-12-05T07:00-04:00", "e" => "2011-12-06T06:59-04:00"), 
    "gfd"  => array("s" => "2011-12-06T07:00-04:00", "e" => "2011-12-07T06:59-04:00"), 
    "gfd"  => array("s" => "2011-12-07T07:00-04:00", "e" => "2011-12-08T06:59-04:00"), 
    "bob" => array("s" => "2011-12-08T07:00-04:00", "e" => "2011-12-09T06:59-04:00"), 
    "tree" => array("s" => "2011-12-09T07:00-04:00", "e" => "2011-12-11T23:00-04:00"), 
); 

例如,一個數組中,我需要確定當前date("c");是數組中的"s""e"之間再拿到鍵。所以它會說今天是2011-11-30T09:50-04:00,並確定關鍵是hgfh有沒有快速和骯髒的方法來做到這一點?我對性能有點擔心,所以如果有一種更好的性能方法,我會很感激。

+0

你有相同的索引'hgfh' 4次,這是一個錯誤的複製和粘貼? –

+0

這是垃圾數據哈哈 – Steven

回答

2

將日期作爲字符串存儲,尤其是當您想要做這種'間'比較時,無論您做什麼都會很痛苦。您應該存儲表示那些時間的原始PHP時間戳值,例如

array(
    'hgfh' => array('s' => 1000, 'e' => 2000) 
    etc... 
) 

(使用明顯假的時間戳值)。然後,它變成一個簡單的問題:

$check = strtotime('2011-11-30T09:50-04:00'); 
foreach($yourarray as $key => $times) { 
    if (($check >= $times[s]) && ($check <= $times[e])) 
     break; 
    } 
} 
echo $key; 

否則你堅持將每次運行檢查循環,它得到昂貴的速度非常快,那些字符串的時間值。始終以原生格式存儲時間/日期,並根據需要將其轉換爲人類可讀的。

0
function get_matches($date_array) { 

     $new_date_array = array_filter($date_array, 'match_dates'); 

     print_r(array_keys($new_date_array)); 

    } 

    function match_dates($array_element) { 

     return date('c') >= $array_element['s'] && date('c') <= $array_element['e'] ? true : false; 

    } 
0

「因此,它會說今天是2011-11-30T09:50-04:00」

從這個問題行表明,有使用日曆日期和本地化時間戳的嘗試互換。

這比試圖在日曆日期和純時間戳之間進行切換要好,但仍然不明確。

如果是關於日曆日期,則將它們存儲爲這樣,例如, 2011-11-24

如果性能很重要,您可以將這些日曆存儲爲例如。修改儒略日期。

時間戳表示絕對時間點,通常以秒爲單位。

本地化時間戳表示絕對時間點的組合,通常以秒爲單位加上有效時區偏移量,通常以小時或分鐘爲單位。

日曆日期表示日曆日期 - 開始和結束時間戳取決於某個地方的管轄權定義的時間戳。

無論您是否使用ISO-8601字符串表示法或數字表示法,始終注意清楚您的意圖。

時間似乎很容易乍一看。

但時間反而實際上只是最容易出錯的一種。