根据提供的日期创建日期范围选择器

时间:2016-09-19 11:20:52

标签: php mysql

我有一个多年的字段的MySQL数据库表。该表的示例可以是:

registration_date |
------------------
1965
1972
1984
1997
1963

在事物的前端,用户可以从年份“范围”的下拉列表中进行选择。即。

1961-1965
1966-1970
1971-1975

根据我的数据库中可用的数据生成此日期范围的最有效方法是什么?

我试过了:

$row = //year available
while(((int) substr($row, -1)) !== 0) {
 $start_date = $row--;
}

while(((int) substr($row, -1)) !== 6) {
 $end_date = $row++;
}

但不幸的是,这只是因为执行时间太长而挂起。

1 个答案:

答案 0 :(得分:0)

您需要使用min()max()函数从数据库registration_date中查找最小值和最大值。 我在这里使用的是php函数,您应该使用查询来查找MINMAX。 我将为您提供与数组相同的示例。

<?php
$resArr = Array(1965,1972,1984,1997,1963);
$max = max($resArr);
$min = min($resArr);
$diff = (($max - $min)/5) + 1;
while($max % 5 != 0)
{
    $max++;
}
while($min % 5 != 0)
{
    $min--;
}

for($i=0;$i<$diff;$i++)
{
    $start = $min+1;
    $end = $min+5;
    $range = $start."-".$end;
    $rangeArr[] = $range;
    $min = $min+5;
}

foreach($rangeArr as $row)
{
    $flag = 0;
    $tmpArr = explode("-", $row);
    foreach($resArr as $val)
    {
        if($val>=$tmpArr[0] && $val<=$tmpArr[1])
        {
            $flag = 1;
        }
    }

    if($flag)
    {
        $newArr[] = $row;
    }
}

echo "Final Array";
print_r($newArr);

<强>输出

Array
(
    [0] => 1961-1965
    [1] => 1971-1975
    [2] => 1981-1985
    [3] => 1996-2000
)

在线演示:Click Here