在我的数据库中,日期保存的格式如下-------
Col_date
05-May-2014
07-APR-2014
在我的仪表板中,我必须显示表格中的结果,其中col_date介于当前日期和当前日期7天之前的日期之间。
我得到当前日期------
$curdate = date('d-M-Y', time());
我得到了7天的回复日期-------
$backdate = date('d-M-Y', time());
$date1 = strtotime($backdate);
$date = strtotime("-7 day", $date1);
$prevdate = date('d-M-Y', $date);
我运行查询----------
select * from `requisition` WHERE col_date >= '$prevdate' AND col_date <= '$curdate' order by `rq_no` DESC
但我的问题是它在搜索并显示结果时无法比较月份。假设$ curdate是&#39; 05-May-2014&#39; $ prevdate是&#39; 2014年5月 - 2014年&#39;然后它显示了这些日期之间的结果,它还显示了这个日期范围在&#39; April&#39;,&#39; 1月&#39;,&#39; 2月&#39;,&#之间的结果39;三月&#39;
请告诉我并告诉我如何克服并解决这个问题
答案 0 :(得分:0)
试一试:
$backdate = date('d-M-Y', time());
$date1 = strtotime($backdate);
$date = strtotime("-7 day", $date1);
select * from `requisition` WHERE UNIX_TIMESTAMP(col_date) >= '$date' AND UNIX_TIMESTAMP(col_date) <= '$date1' order by `rq_no` DESC
答案 1 :(得分:0)
将日期存储为varchar
或TEXT
会使比较变得困难。最好存储为date
或datetime
。
在您的情况下,解决方法是
$backdate = date('Y-m-d', time());
$date1 = strtotime($backdate);
$date = strtotime("-7 day", $date1);
$prevdate = date('Y-m-d', $date);
select * from
`requisition`
WHERE
date_format(str_to_date(col_date,'%m-%b-%Y'),'%Y-%m-%d') >= '$prevdate'
AND date_format(str_to_date(col_date,'%m-%b-%Y'),'%Y-%m-%d') <= '$curdate'
order by `rq_no` DESC
所以我以Y-m-d格式输入日期。
然后在where子句中使用了mysql函数date_format
和str_to_date
。
str_to_date会将varchar日期转换为实际日期,然后是格式,并在比较中使用它们。