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

时间:2011-09-26 13:02:54

标签: php mysql sql database scripting

我正在编写一个显示所选月份数据的系统。用户可以选择他们想要查看的月份,然后创建一个类似这样的.com / page.php?month = 03的页面,你可以猜到这个想法会接受这个想法,然后用它从数据库中获取数据那个月。

现在根据我对vars的URL中的月份,基于此示例的$ 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中也是一样的。

感谢任何帮助我真正坚持这一点的人。

2 个答案:

答案 0 :(得分: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")) );

答案 1 :(得分:1)

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