Циклически просматривайте даты в базе данных и вычисляйте оставшиеся до даты дни в каждой строке

Я пытаюсь выяснить, как пройтись по базе данных и рассчитать оставшиеся дни до отдельной даты в строке.

Формат даты 15.06.2017 m / d / y, но напечатанный показывает y / m / d, как показано ниже в вопросе. (В настоящее время сидит как varchar в БД, это будет изменено на DATE)

Информация о стеке: Xampp 5.6.30 (Apache + MariaDB + PHP + Perl) Я не использую Perl.

Я дошел до получения массива со всеми датами.

Это код, который получает массив:
$ даты = массив ();

$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+ массивов, как показано здесь, с 2 строкой var_dump на $ Row, а не как 1 массив, как $x['1'], $x['2'] и так далее:

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

Раньше я дурачился и сбрасывал все данные на даты, и я изменил первую строку, чтобы показать пример.

0

Решение

Используйте функцию mysql DATEDIFF:

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

Другие решения

Если отдельная дата в строке известен на уровне базы данных, затем используйте DATEDIFF функционировать, как указал Кевин. Кроме того, некоторые другие СУБД (не уверенные в MySQL) допускают простую математику между двумя датами, например (date1 - date2) as delta_days,

Если вы знаете дату позже, на уровне PHP, то используйте DateTime класс, разностный метод. Гораздо проще и безопаснее в использовании. Это может занять много форматов ввода в качестве даты, а затем сделать математику.

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 и разделить их на 3 массива на основе If/Ifelse операторы, а затем подсчитываются и фильтруются, чтобы показывать только ненулевые элементы внутри массива, что делает возможным динамический счет.
СПАСИБО ЗА ВСЕ ПОМОЩЬ, КОТОРУЮ Я ПОЛУЧИЛ НА ЭТОМ ВОПРОСЕ, ЭТО БОЛЬШОЕ ПРИЗНАНО !! <3

0