遍历数据库中的日期并计算每一行的日期剩余天数

Loop through Dates in database and calculate days remaining to the date on each row

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

日期格式 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 而不是 1 数组,如 $x['1'], $x['2'] 等等:

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

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

使用mysql的DATEDIFF函数:

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

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

如果以后知道日期,在PHP级别,则使用DateTimeclass,diff方法。使用起来更简单和安全。它可以将很多输入格式作为日期,然后再进行数学计算。

我一直在修改,因为它不能完美地适应,这就是我最终得到的一个成功的脚本,用于计算 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 元素数组,使其能够动态计数。
感谢我在这个问题上收到的所有帮助,非常感谢!! <3