Я пытаюсь выяснить, как пройтись по базе данных и рассчитать оставшиеся дни до отдельной даты в строке.
Формат даты 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" }
Раньше я дурачился и сбрасывал все данные на даты, и я изменил первую строку, чтобы показать пример.
Используйте функцию mysql DATEDIFF:
SELECT Next_Kal, DATEDIFF(NOW(), Next_Kal) as Days_Remaining
FROM Maaleinstrumenter_final
Если отдельная дата в строке известен на уровне базы данных, затем используйте DATEDIFF
функционировать, как указал Кевин. Кроме того, некоторые другие СУБД (не уверенные в MySQL) допускают простую математику между двумя датами, например (date1 - date2) as delta_days
,
Если вы знаете дату позже, на уровне PHP, то используйте DateTime класс, разностный метод. Гораздо проще и безопаснее в использовании. Это может занять много форматов ввода в качестве даты, а затем сделать математику.
Я продолжал возиться, так как он не подходил идеально, вот чем я закончил как успешный скрипт для вычисления дат, оставшихся в 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