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

rag*_*nny 1 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"));
}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试使用这些变量从数据库中获取数据时,它似乎不起作用,这是查询:

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

问题是,如果我将变量更改为硬编码日期,它的作品是一种享受...任何人都有任何想法?我认为它与日式格式有关?在我的数据库中它的"Ymd"并且在php中也是一样的.

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

Geo*_*ins 5

mktime将日期生成为Unix时间戳(例如'1317046059'),但您的表以不同的格式存储日期(例如'2011-09-26').要使查询起作用,您需要将时间戳转换为适当的格式:

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

更新:

根据您的新评论,您的日期将作为时间戳存储在数据库中,您需要以这种方式格式化日期:

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