PHP MySQL在日期

时间:2016-03-04 13:43:13

标签: php mysql

我有一个简单的代码,我无法开始工作。我试图在所选日期之间获取所有数据,但它不起作用。这是我的代码:

形式

 <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。

我该怎么做才能使代码生效?提前谢谢。

enter image description here

3 个答案:

答案 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."'

Fiddle

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');