从两个日期之间的数据库获取数据

问题描述:

我正在编写一个系统,显示选定月份的数据。用户可以选择他们想查看的月份,然后创建一个如下所示的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中也是一样的。

感谢任何帮助的人,我真的坚持在这一个。

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

您应该在关键位置使用几个var_dump语句来评估您的代码。通过这种方式,您可以准确地知道数据的外观,包括格式,然后就可以根据需要设计出如何格式化日期。