Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环遍历数据库中的日期,并计算每行上到该日期的剩余天数_Php_Mysql_Arrays_Date_Calculation - Fatal编程技术网

Php 循环遍历数据库中的日期,并计算每行上到该日期的剩余天数

Php 循环遍历数据库中的日期,并计算每行上到该日期的剩余天数,php,mysql,arrays,date,calculation,Php,Mysql,Arrays,Date,Calculation,我试图弄清楚如何循环数据库,并计算每行到单个日期为止的剩余天数 日期格式2017年6月15日m/d/y,但打印时显示y/m/d,如问题后面所示。目前在数据库中作为varchar存在,将更改为DATE 堆栈信息:XAMPP5.6.30 Apache+MariaDB+PHP+Perl我不使用Perl 我已经得到了一个包含所有日期的数组 这是获取数组的代码: $dates=数组 $Kal_get = "SELECT Next_Kal FROM Maaleinstrumenter_final"; $Re

我试图弄清楚如何循环数据库,并计算每行到单个日期为止的剩余天数

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

堆栈信息:XAMPP5.6.30 Apache+MariaDB+PHP+Perl我不使用Perl

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

这是获取数组的代码: $dates=数组

$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;
这两个脚本并没有连接在一起,因为我试图创建一个变量来循环计算,但它循环了无数次。这可以通过将其嵌套在if语句中来解决

我将如何继续加入这两个脚本并获得300+个结果,并将它们分为3组:超过一个月、不到一个月和不到10天

我观察到的事情: 组装数组的wile循环以某种方式显示为360+个数组,如图所示,在$row上有一个2行var_转储,而不是像$x['1']、$x['2']这样的1个数组:

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
如果在数据库级别知道每行的单个日期,则使用Kevin指出的DATEDIFF函数。另外,其他一些对MySQL不确定的DBMS允许在两个日期之间进行简单的数学运算,比如date1-date2作为delta_天


如果您稍后在PHP级别知道日期,则使用类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个数组,然后进行计数和过滤,以仅显示数组中的非空元素,从而使其能够动态计数。
谢谢你在这个问题上给予我的帮助,非常感谢!!那么这将创建一个看起来像$x['1']的数组,填充所有计算?假设您使用while$x=mysqli_fetch_array$result作为循环,那么是的$x['0']将包含存储在数据库中的日期,$x['1']将包含从现在起到$x['0']中指定日期的天数。我刚刚尝试过,var_dump表明天数的计算是正确的+1,这很好,但它显示为-75,我可以接受,因为这对我来说并不重要,只要有适当的天数:-我将如何循环它并根据还剩多少天将数组拆分为3个数组?你能给我一个基于示例数据库数据的预期结果的示例吗?我会尽我最大的努力。假设我运行你给我的脚本,它在数组中输出360+行。其中100个在echo'd表中显示为2个月以上变绿100个在echo'd表中显示为不到1个月变黄160个在echo'd表中显示为不到10天变红我认为可以通过将If``和Ifelse`和Ifelse添加到循环中来实现,如:Ifdate_Remaining>30{将该行放入数组1 green的代码}Ifelsedate_剩余的日期与Kevin提供的日期不同,现在我只需要将它们分成3个数组并计算每个数组中的行:-可以在SQL中使用case语句,以范围/颜色分隔句点,也可以在php中使用case。请在你的问题中更具体一些。您以计算天数开始,以绿色/红色结束,同时回显html表格。您误解了,Kevin正在引导我正确的方向,我几乎到达终点。红色/黄色/绿色只是举例说明表格在剩余天数时的行为,与计算本身无关-