日期选择器php的错误处理


Error handling for datepicker php

你好,我该如何解决这个问题?例如,用户选择未来的日期,例如,今天是10月5日,用户输入10月20日,然后他选择$dateto在过去,可能是9月30日

我将如何阻止用户做这样的事情?

这是我的代码

<?php
if(isset($_GET['datefrom']) && ($_GET['dateto'])){
$datefrom   = $_GET['datefrom'];
$dateto     = $_GET['dateto'];
    $qry = "SELECT sum(order_detail.quantity*order_detail.price) as chenes, orders.date 
        FROM order_detail 
        LEFT JOIN orders 
        ON order_detail.orderid=orders.serial
        WHERE date(orders.date) BETWEEN '$datefrom' AND '$dateto'";
}
else {
    $qry = "SELECT sum(order_detail.quantity*order_detail.price) as chenes, orders.date 
        FROM order_detail 
        LEFT JOIN orders 
        ON order_detail.orderid=orders.serial";
}

mysql_set_charset("UTF8");
$result = @mysql_query($qry);
if($result === FALSE) {
    die(mysql_error()); // TODO: better error handling
}   
while ($row=mysql_fetch_array($result)){
//echo $datefrom." ";
//echo $dateto." - ";
echo "₱".number_format($row['chenes'],2);
}
?>

$datefrom是过去的,$dateto在现在或仍然是过去,但不超过$datefrom。

$datefrom应始终早于$dateto。

请帮帮我,谢谢

我处理它的方式(如果在它到达这一点之前我不通过JS处理它)是:

// This puts both dates into a date format PHP can understand
$tmpFrom = strtotime($_GET['datefrom']);
$tmpTo = strtotimem($_GET['dateto']);
// Compare the dates, if TO is after (greater) than FROM, everything's fine.  Otherwise, Swap 'em.
$dateFrom = ($tmpTo - $tmpFrom ) > 0 ? $_GET['datefrom'] : $_GET['dateto'];
$dateTo = ($tmpTo - $tmpFrom ) > 0 ? $_GET['dateto'] :$_GET['datefrom'];

您可以使用jQuery ui日期选择器。

下面是一个例子http://jsfiddle.net/ymcrnmm3/1/

$("#datefrom").datepicker({
    minDate: 0,
    onSelect: function (selected) {
        $("#dateto").datepicker("option", "minDate", selected)
    }
});
$("#dateto").datepicker({
    minDate: 0,
    onSelect: function (selected) {
        $("#datefrom").datepicker("option", "maxDate", selected)
    }
});

您可以更改为时间戳并减去每个时间戳。然后你可以比较它是否更大。

$from = strtotime($_GET['datefrom']);
$to = strtotime($_GET['dateto']);
$now = time();
$interval1 = $now - $from;
$interval2 = $now - $to;
if($now > $interval1 || $now > $interval2) {
    // do the rest 
}