Вычислить дату между строками в цикле массива (foreach)

я искал, как вычислить значения в цикле массива, прежде всего.

Проблема в том, что я должен рассчитать дни между датами этого результата.

Пример:

<ul>
<?php
$values[] = array('example'=>'example1','date'=>'2016-25-12');
$values[] = array('example'=>'example2','date'=>'2016-26-12');
$values[] = array('example'=>'example3','date'=>'2016-28-12');
$values[] = array('example'=>'example4','date'=>'2016-30-12');

foreach($values[] as $example){
echo "<li>".$example['example']." - ".$example['date']." - ".$DAYS BETWEEN EACH DATE$."</li>";
}

?>
</ul>

Чтобы стать чем-то вроде этого:

  • пример1 — 2016-25-12
  • пример1 — 2016-26-12 — 1 дн.
  • пример1 — 2016-28-12 — 2 дн.
  • пример1 — 2016-30-12 — 2 дн.
  • Как я могу сделать этот каль?
    * первый ничего не показывает, потому что это первый регистр .. остальные показывают, сколько дней прошло между фактической строкой и последней (см. выше).

    Ty.

    1

    Решение

    Я изменил форматирование вашей даты в массиве, так как YYYY-DD-MM не распознается как действительный формат, YYYY-MM-DD является.

    Тогда нужно просто сохранить предыдущее значение и рассчитать разницу в днях.

    <ul>
    <?php
    $values = array();
    $values[] = array('example' => 'example1', 'date' => '2016-12-25');
    $values[] = array('example' => 'example2', 'date' => '2016-12-26');
    $values[] = array('example' => 'example3', 'date' => '2016-12-28');
    $values[] = array('example' => 'example4', 'date' => '2016-12-30');
    
    $previous = null; // Define the variable
    foreach($values as $example){
    echo "<li>".$example['example']." - ".$example['date'];
    
    if ($previous !== null) { // If it's null, we're in the first loop
    $difference= strtotime($example['date'])-strtotime($previous);
    echo " - ".floor($difference/(60*60*24)); // $difference is in seconds, so convert to days by dividing by 60sec*60min*24hrs
    }
    
    $previous = $example['date']; // Set the current value, so it will be saved for the next iteration
    echo "</li>";
    }
    
    ?>
    </ul>
    

    Результатом вышесказанного будет

    • пример1 — 2016-12-25
    • пример2 — 2016-12-26 — 1
    • пример3 — 2016-12-28 — 2
    • пример4 — 2016-12-30 — 2

    демонстрация

    2

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

    $date = false;
    foreach($values as $item) {
    if ($date == false) {
    $date = $item['date'];
    } else {
    $datetime1 = new DateTime($date);
    $datetime2 = new DateTime($item['date']);
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%R%a days');
    $date = $item['date'];
    }
    }
    

    Что-то вроде того. Я не проверял синтаксис, просто написал на лету

    1

    <ul>
    <?php
    $values[] = array('example'=>'example1','date'=>'2016-25-12');
    $values[] = array('example'=>'example2','date'=>'2016-26-12');
    $values[] = array('example'=>'example3','date'=>'2016-28-12');
    $values[] = array('example'=>'example4','date'=>'2016-30-12');
    
    $date_prev = 0;
    foreach($values as $example){
    $parts = explode( '-', $example[ 'date' ]);
    $date_current =  strtotime($parts[0] . '/' . $parts[2] . '/' . $parts[1]); // year-month-day format
    $diff = $date_current - $date_prev;
    $DAYS_BETWEEN_EACH_DATE = intval($diff / 86400); // 86400 seconds in one day
    echo "<li>" . $example['example'] . " - " . $example['date'] . ($date_prev ? " - ". $DAYS_BETWEEN_EACH_DATE . ' day(s)' : '' ) . "</li>";
    $date_prev = $date_current;
    }
    
    ?>
    </ul>
    
    1

    Используйте функцию date_diff (), вы также можете получить результат в днях

    Документация: http://php.net/manual/en/function.date-diff.php

    0
    По вопросам рекламы ammmcru@yandex.ru
    Adblock
    detector