使用 Jquery Datepicker 进行 PHP MYSQL 日期范围搜索

Posted

技术标签:

【中文标题】使用 Jquery Datepicker 进行 PHP MYSQL 日期范围搜索【英文标题】:PHP MYSQL Date Range Search with Jquery Datepicker 【发布时间】:2013-10-13 05:09:37 【问题描述】:

我尝试了几种不同的解决方案来解决我的问题,但我似乎找不到一个可行的方法。我正在尝试从我的 mysql 数据库中的日期时间字段中搜索日期范围。 这是我在表单之前的 jquery:

  <script type="text/javascript" language="javascript">
            jQuery(function() 
                jQuery( "#from" ).datepicker(
                  defaultDate: "+1w",
                  changeMonth: true,
                  numberOfMonths: 1,
                  dateFormat: "yy-mm-dd",
                  onClose: function( selectedDate ) 
                    $( "#to" ).datepicker( "option", "minDate", selectedDate );
                  
                );
                jQuery( "#to" ).datepicker(
                  defaultDate: "+1w",
                  changeMonth: true,
                  numberOfMonths: 1,
                  dateFormat: "yy-mm-dd",
                  onClose: function( selectedDate ) 
                    jQuery( "#from" ).datepicker( "option", "maxDate", selectedDate );
                  
                );
            );
</script>

这是我的简单表格:

<form method="post" action="search.php">
<p>Select a date range: </p><label style="color:#FFF;" for="from">From</label>
From:<input type="text" id="from" name="from" />
<label style="color:#FFF;" for="to" >to</label>
To:<input type="text" id="to" name="to" />
<input name="export" type="submit" value="Search" />
</form>

这是我的 sql 语句:

        $hostname = ""; //SET SERVER/HOSTNAME
    $dbusername = ""; //SET DATABASE USERNAME
    $dbname = ""; //SET DATABASE NAME
    $dbpassword = ""; //SET DATABASE USERNAME
    $link = mysqli_connect($hostname, $dbusername, $dbpassword, $dbname); 
    if (!$link)  
    die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); 
     
$sql = "SELECT * FROM log WHERE call_date >= DATE_FORMAT('" . $from . "', '%Y%m%d') AND call_date <=  DATE_FORMAT('" . $to . "', '%Y%m%d')";
//$sql = "SELECT * FROM log WHERE call_date >= '".date("Y-m-d", strtotime($from))."' AND call_date <=  '".date("Y-m-d", strtotime($to))."'";  

//$sql = "SELECT * FROM log WHERE call_date >= '$from' AND call_date <=  '$to'"; 
    $result = mysqli_query($link, $sql, MYSQLI_STORE_RESULT);
while($row = $result->fetch_assoc())
        $name= $row['name'];
        $disposition = $row['did_id'];
        $date = $row['call_date'];

...然后输出我的结果。你可以看到我尝试了一些我已经注释掉的不同的 sql 语句。我知道我可以连接到我的数据库,我知道我正在获取格式为 yyyy-mm-dd 的日期,并且 datetime 字段的格式为 yyyy-mm-dd hh:mm:ss。任何帮助是极大的赞赏。谢谢。

【问题讨论】:

【参考方案1】:

jQuery 返回格式dateFormat: "yy-mm-dd"

DATE_FORMAT('" . $to . "', '%Y%m%d')"; 改为DATE_FORMAT('" . $to . "', '%Y-%m-%d')";

如果不定义时间,MySQL 会自动定义为 00:00:00。

所以,如果您选择日期2000-01-02,MySQL 将选择2000-01-02 00:00:00

这是选择日期的例子:$sql = "SELECT * FROM log WHERE call_date &gt;= DATE_FORMAT('$from', '%Y-%m-%d') AND call_date &lt;= DATE_FORMAT('$to 23:59:59', '%Y-%m-%d %H:%i:%s')";

【讨论】:

【参考方案2】:

改变

   $sql = "SELECT * FROM log WHERE call_date >= DATE_FORMAT('" . $from . "', '%Y%m%d') AND call_date <=  DATE_FORMAT('" . $to . "', '%Y%m%d')";

   $sql = "SELECT * FROM log WHERE call_date >= DATE_FORMAT('" . $from . "', '%Y/%m/%d') AND call_date <=  DATE_FORMAT('" . $to . "', '%Y/%m/%d')"; 

【讨论】:

漂亮。你太棒了。

以上是关于使用 Jquery Datepicker 进行 PHP MYSQL 日期范围搜索的主要内容,如果未能解决你的问题,请参考以下文章

jquery ui datepicker字体大小很大

如何触发 jQuery UI DatePicker onclick?

Jquery Datepicker在一个日历中选择多个日期范围

日期选择器:jquery datepicker的使用

在 jquery datepicker 重置为当前日期之前捕获手动输入的日期,同时使用 Max Date 进行限制

日期选择器:jquery datepicker的使用