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

问题描述:

我正在搜索如何计算数组循环中的值,这是一个foreach精灵。PHP - 计算数组循环中的行之间的日期(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天(S)
  • 例1 - 2016-30-12 - 第2天(S)
  • 我怎样才能麦这个钙? *第一个没有显示任何内容,因为它是第一个注册表。其他显示实际行和最后一个(上面)之间经过了多少天。

    Ty。

    我改变了数组中的日期格式,因为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
    • example4 - 2016-12-30 - 2

    Demo

    +1

    泰。奇迹般有效! =) –

    使用date_diff()函数,你可以得到导致天以及

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

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

    类似的东西。我没有检查语法,只是写了

    <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>