PHP - 计算数组循环中行之间的日期(foreach)

时间:2016-12-27 17:20:46

标签: php arrays 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>

成为这样的事情:

  • example1 - 2016-25-12
  • example1 - 2016-26-12 - 1天
  • example1 - 2016-28-12 - 2天
  • example1 - 2016-30-12 - 2天
  • 我该怎么做这个计算? *第一个显示没有,因为它是第一个寄存器..其他显示实际行和最后一个(上面)之间经过了多少天。

    4 个答案:

    答案 0 :(得分:2)

    我更改了数组中日期的格式,因为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>
    

    上述输出将是

      
        
    • example1 - 2016-12-25
    •   
    • example2 - 2016-12-26 - 1
    •   
    • example3 - 2016-12-28 - 2
    •   
    • example4 - 2016-12-30 - 2
    •   

    Demo

    答案 1 :(得分:1)

    $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'];
      }
    }
    

    这样的事情。我没有检查语法,只是动态写了

    答案 2 :(得分: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>
    

    答案 3 :(得分:0)

    使用date_diff()函数,你也可以在几天内得到结果

    文档:http://php.net/manual/en/function.date-diff.php