我试图弄清楚如何遍历数据库并计算剩余天数,直到每行的个别日期。
日期格式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" }
我早些时候搞过并重置了日期的所有数据,我更改了第一行以显示示例。
答案 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