2011-09-26 133 views
1

我正在編寫一個系統,顯示選定月份的數據。用戶可以選擇他們想查看的月份,然後創建一個如下所示的URL:.com/page.php?month = 03頁面,您可以猜到將採用這個想法,然後用它從數據庫中獲取數據從那個月開始。從兩個日期之間的數據庫獲取數據

現在基於URL中的月份,我正在對vars進行基於這個示例的$ startdate $ enddate開始日期是2011-03-01,然後我將29或30添加到日期的部分日期如果這個月有31或30天。好了,所以我做的日期是這樣的:

$startdate = mktime(0,0,0,date("$month"),date("01"),date("2011")); 
if($month==04 || $month==06 || $month==9 || $month==11) 
{ 
    $enddate = mktime(0,0,0,date("$month"),date("01")+29,date("2011")); 
} 
else 
{ 
    $enddate = mktime(0,0,0,date("$month"),date("01")+30,date("2011")); 
} 

現在,當我試圖從這些變量的數據庫,它似乎並沒有工作取得的數據,這是查詢:

$getresults = mysql_query("SELECT * FROM table1 WHERE date BETWEEN $startdate AND $enddate ORDER BY date ASC"); 

問題是,如果我將變量改爲硬編碼的日期,它的作品就是一種享受...任何人有任何想法?我認爲這與格式化日子的方式有關?在我的數據庫中它的「Y-m-d」,在php中也是一樣的。

感謝任何幫助的人,我真的堅持在這一個。

回答

5

mktime產生日期爲Unix時間戳(例如'1317046059'),但您的表格以不同的格式存儲日期(例如'2011-09-26')。爲了使您的查詢工作,你需要將時間戳轉換成相應的格式:

$enddate = date('Y-m-d', mktime(0,0,0,date("$month"),date("01")+29,date("2011"))); 

更新:

基於新的評論,你的日期被存儲爲時間戳在你的數據庫,你將需要以這種方式格式化您的日期:

$enddate = date('Y-m-d h:i:s', mktime(0,0,0,date("$month"),date("01")+29,date("2011"))); 
+0

謝謝你,但現在我回聲1970年的數據......? – ragebunny

+0

我不確定我瞭解你的問題。你能改述一下嗎? –

+0

是的,我用你的代碼,$ enddate = date('Ym-d',mktime(0,0,0,date(「$ month」),date(「01」)+ 29,date(「2011」)) );然後用回顯打印日期,現在我的日期是1970-01-01 1970-01-01,而不是2011年9月。希望這會好一點。 – ragebunny

1

您應該在關鍵位置使用幾個var_dump語句來評估您的代碼。通過這種方式,您可以準確地知道數據的外觀,包括格式,然後就可以根據需要設計出如何格式化日期。

相關問題