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

标签 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++;
}

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

最佳答案

您需要使用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

关于php - 根据提供的日期创建日期范围选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571956/

相关文章:

java - Hibernate 中的半正矢公式 - Spring

MySQL:比较时间

准备好的语句中的 PHP 准备好的语句

php - 使用 PHP/MySQL 简化数据库/登录流程

php - 如何向数据库中插入一些与另一行相同的信息?

php - 扩展 PHP 类以允许通过 __callStatic 找到新方法

php - GROUP BY table1.column_name ORDER BY table2.column_name

php - 如何计算以秒为单位的两个日期时间之间的差异?

mysql - 在没有 SUPER 权限的情况下创建存储函数和触发器

php - 如何使用PHP使用GAE将图像上传到谷歌云存储