2012-02-21 79 views
0

需要一些幫助。我差不多完成了,但一直在過濾日期。例如,我不希望昨天的日期顯示爲otpion。以下是我的代碼到目前爲止。篩選出已經通過的日期

<select name="choose_date" id="choose_date"> 
<?php 
    if (isset($datesavailable) && is_array($datesavailable)) 
    { 
     foreach($datesavailable as $val) 
     { 
     rsort($val); 
     echo' <option value="'.$val.'">'.$val.'</option>\n'; 
     } 
    } 
    ?> 
    </select> 

感謝您的時間提前。

+2

什麼格式是日期嗎? – Cfreak 2012-02-21 16:07:26

+1

請發帖'var_dump($ datesavailable)' – 2012-02-21 16:08:12

+1

過濾錯誤的地方。你如何在第一時間生成日期? – Gordon 2012-02-21 16:08:17

回答

1

比較「今天」日期和給定日期的unix時間戳...(您用於日期的格式不應該很關鍵,因爲strtotime會分析包含英文日期格式的字符串,並會嘗試解析格式爲Unix時間戳)

$date = "2004-02-29"; 
$unix_date = strtotime ($date); 

if ($unix_date < time()) 
{ 
    echo "date is before"; 
} 
else 
{ 
    echo "date is after"; 
} 
0

戈登指出,你應該在構造datesavailable刪除不需要的日期,但你可以做到這一點無論是在這裏或之前以簡單的東西如:

if (strtotime($val) < strtotime('today')) { 
    continue; 
} 

你可以得到更具體的,b取決於您的日期是什麼樣,ut strtotime可能無法正常工作。

+0

我認爲你很接近,但似乎並沒有解決。完整的代碼在這裏[鏈接] http://pastebin.com/8C7T6dcw頁面的頂部也有一個Ajax。 – user1223745 2012-02-21 17:08:37

1

最簡單的方法是將日期轉換爲unix時間戳並將其與time()或類似的函數(取決於時區等)進行比較。你也可以嘗試使用strtotime,但它依賴於語法。試想一下,你有正確的語法(類似Y-m-d H:i):

foreach ($datesavailable as $val) { 
    if (!(strtotime($val) < time())) 
    echo ' <option value="'.$val.'">'.$val.'</option>\n'; 
} 

而且我不明白爲什麼會出現rsort($val);rsort是數組的反向排序函數,爲什麼你會嘗試對字符串進行排序?

最後,您應該考慮在輸出之前過濾數據,例如,在選擇數據。

+0

這裏是完整的代碼的鏈接pastebin.com [鏈接] http://pastebin.com/8C7T6dcw [鏈接] – user1223745 2012-02-21 16:41:30

+0

它不會改變任何東西,我已經張貼了我的答案:) – YuS 2012-02-21 16:47:38

+0

好的,謝謝,但它似乎沒有工作.... – user1223745 2012-02-21 16:59:55

1

如果你有PHP 5.3,你可以使用DatePeriod類來生成可用日期,說你只想要下個月包括:

$today = new DateTime(); 
$lastDay = clone $today; 
$lastDay->add(new DateInterval("P1M1D")); 
$period = new DatePeriod($today, new DateInterval("P1D"), $lastDay); 

foreach ($period as $day) 
{ 
    $formatted = $day->format('Y-m-d'); 
    print "<option value=\"{$formatted}\">{$formatted}</option>\n"; 
} 

你必須設定date_default_timezone_set默認時區( )

1

現在我們有更多的信息,我會給出另一個答案,但我會留下我的第一個答案,以防萬一它可以幫助有其他問題的人。

鑑於新信息,爲什麼從數據庫中提取日期時不能過濾舊日期?隨後的查詢是:

SELECT * FROM wp_location_date WHERE location=$id and location_date >= CUR_DATE() ORDER BY location_date 

,並通過使用rsort的判斷()函數,你要以相反的順序,以便查詢能解決這個可用日期立即通過訂單後添加DESC,像這樣:

SELECT * FROM wp_location_date WHERE location=$id and location_date >= CUR_DATE() ORDER BY location_date DESC 

如果你仍然必須這樣做在PHP中,你可以篩選這樣的日期:

// Have this first line outside the foreach(), no need to set it multiple times. 
$today = strtotime(date('Y-m-d')); 
$valDate = strtotime($val); 

if ($valDate >= $today) 
{ 
    echo ' <option value="'.$val.'">'.$val.'</option>\n'; 
}