循环访问数据库中的日期,并计算每行剩余的日期

时间:2017-09-28 08:15:32

标签: php mysql arrays date calculation

我试图弄清楚如何遍历数据库并计算剩余天数,直到每行的个别日期。

日期格式6/15/2017 m / d / y但打印显示y / m / d,如问题后面所示。 (目前在数据库中作为varchar,将更改为DATE)

堆栈信息:Xampp 5.6.30(Apache + MariaDB + PHP + Perl)我不使用Perl。

我已经得到了一个包含所有日期的数组。

这是获取数组的代码: $ dates = array();

$Kal_get = "SELECT Next_Kal FROM Maaleinstrumenter_final";
$Result = mysqli_query($conn, $Kal_get);
WHILE ($Row = mysqli_fetch_assoc($Result))

此外,我已经成功计算了1行(日期不是正确的,应填充来自$ Row的数据)

$date = strtotime("December 3, 2009");
$remaining = $date - time();  
WHILE($day = floor($remaining / 86400));
Echo $day;

2个脚本没有连接在一起,因为我试图创建一个循环计算的变量,但它无休止地循环。这可以通过将其嵌套在if语句中来解决。

我如何继续加入2个脚本并获得300多个结果并将它们分成3组(超过一个月,不到一个月,不到10天)

我观察过的事情: 组装数组的wile循环以某种方式显示为360+数组,如$ Row中的2行var_dump而不是像$x['1'], $x['2']那样的1个数组,依此类推:

array(1) { ["Next_Kal"]=> string(10) "1993-12-12" } 
array(1) { ["Next_Kal"]=> string(10) "0000-00-00" }

我早些时候搞过并重置了日期的所有数据,我更改了第一行以显示示例。

3 个答案:

答案 0 :(得分:1)

使用mysql的DATEDIFF函数:

SELECT Next_Kal, DATEDIFF(NOW(), Next_Kal) as Days_Remaining
FROM Maaleinstrumenter_final

答案 1 :(得分:0)

如果在数据库级别知道每行的个别日期,则使用Kevin指出的DATEDIFF函数。此外,其他一些DBMS(不确定MySQL)允许在两个日期之间进行简单的数学运算,例如(date1 - date2) as delta_days

如果您稍后知道日期,则在PHP级别上,然后使用DateTime类,diff方法。使用起来更简单,更安全。它可能需要很多输入格式作为日期,然后再进行数学计算。

答案 2 :(得分:0)

我一直在修补,因为它不适合完美,这就是我最终得到的一个成功的脚本,用于计算366行的剩余日期。

$Kal_get = "SELECT Bunny_No, Next_Kal, DATEDIFF(NOW(), Next_Kal) FROM Maaleinstrumenter_final";
$Result = mysqli_query($conn, $Kal_get);
$a = 30;
$b = 10;
$moreThan2Months = array();
$lessThan1Month = array();
$lessThan10Days = array();

while($Row = mysqli_fetch_array($Result))
{
$absoluteDays = abs($Row['DATEDIFF(NOW(), Next_Kal)']);
if($absoluteDays > $a) {$moreThan2Months[] = ($Row['DATEDIFF(NOW(), Next_Kal)']);}
elseif($absoluteDays < $a && $absoluteDays >$b) {$lessThan1Month[] = $Row['DATEDIFF(NOW(), Next_Kal)'];}
elseif($absoluteDays < $b) {$lessThan10Days[] = $Row['DATEDIFF(NOW(), Next_Kal)'];}}
echo count(array_filter($lessThan1Month));
?> 

它成功计算了日期并将它们放入$absoluteDays并根据If/Ifelse语句将它们拆分为3个数组,然后进行计数和过滤以仅显示数组内的非NULL元素,使它能够动态计数。
感谢所有我在这个问题上获得的帮助,我非常感激! &LT; 3