我有一个简单的代码,我无法开始工作。我试图在所选日期之间获取所有数据,但它不起作用。这是我的代码:
形式
<form action="selectedInvoices.php" method="POST">
<div class="row">
<div class="large-4 columns">
<label>From
<input type="text" class="datepicker" name="from" />
</label>
</div>
<div class="large-4 columns">
<label>To
<input type="text" class="datepicker" name="to" />
</label>
</div>
<div class="large-4 columns">
<button class="button" type="submit">Show Invoice</button>
</div>
</div>
</form>
selectedInvoices.php
$fromOrig = strtotime($_POST['from']);
$toOrig = strtotime($_POST['to']);
$from = date('Y-m-d', $fromOrig);
$to = date('Y-m-d', $toOrig);
$sql = mysql_query("SELECT * FROM allinvoices WHERE acc_date BETWEEN '".$from."' AND '".$to."'");
while($r = mysql_fetch_assoc($sql)) {
$drno = $r['drno'];
$name = $r['name'];
$amount = $r['amountdue'];
我的acc_date
字段的数据类型是varchar,我猜这里错了。我插入日期的格式是m-d-Y。
我该怎么做才能使代码生效?提前谢谢。
答案 0 :(得分:1)
由于您说数据库中的日期格式为m-d-Y
,因此您只需将$to
和$from
更改为适当的格式。
替换
$from = date('Y-m-d', $fromOrig);
$to = date('Y-m-d', $toOrig);
使用
$from = date('m-d-Y', $fromOrig);
$to = date('m-d-Y', $toOrig);
对于您的查询,您可以将BETWEEN
替换为
acc_date >= $from && acc_date <= $to
答案 1 :(得分:1)
WHERE STR_TO_DATE(acc_date, '%Y/%m/%d') BETWEEN '".$from."' AND '".$to."'
mysql中的日期是Y-m-d,您正在与BETWEEN的d-m-Y进行比较。同时确保$ from是&lt;比$ to。
答案 2 :(得分:1)
我最近做过类似的事情。
我使用的是少于和多于运算符,所以
... WHERE startDate > $date AND endDate < $date
还要确保数据库中的日期字段实际上是正确的date
类型字段。确保在插入日期时,它的格式正确(IE。date
类型可能是yyyy-mm-dd
。)否则数据库无法正确读取。
只是旁注,您可以通过将周围的引号更改为单引号(整个查询周围的引号)来取消查询中的串联。
BETWEEN '".$from."' AND '".$to."'");
可以成为
BETWEEN $from AND $to');