0

こんにちは、日付が入力された配列があります

Array
(
    [0] => 2012-04-04
    [1] => 2012-04-06
    [2] => 2012-04-06
    [3] => 2012-04-06
    [4] => 2012-04-06
    [5] => 2012-04-06
    [6] => 2012-04-06
    [7] => 2012-04-11
    [8] => 2012-04-12
    [9] => 2012-04-12
    [10] => 2012-04-13
    [11] => 2012-04-13
    [12] => 2012-04-13
    [13] => 2012-04-13
    [14] => 2012-04-13
    [15] => 2012-04-13
    [16] => 2012-04-13
)

配列をループして、配列内で隣り合うアイテム間の日数の違いを見つけるにはどうすればよいでしょうか。たとえば、エコーアウトしたい

[0] と [1] の差は「2」日です [1] と [2] の差は「0」日です

:)

一番上の回答から出力を得ることができましたが、日付に違いがある場合にのみ表示したいです。

ただし、このifステートメントからの出力はありません-更新済み-

$count = count($datestack);



for ($i = 0; $i < $count - 1; $i++) {
    $datetime1 = new DateTime($datestack[$i]);
    $datetime2 = new DateTime($datestack[$i + 1]);
    $interval = $datetime1->diff($datetime2);
    if ($arr[$i] === $arr[$i+1]){
     echo $interval->format('%R%a days');
    }

} 
4

3 に答える 3

3

必要なのはDateTime::diffです。

例:

$datetime1 = new DateTime('2012-04-04');
$datetime2 = new DateTime('2012-04-06');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

そして、必要なことを行うには、配列をループするだけです。

$count = count($arr);
for ($i = 0; $i < $count - 1; $i++) {
    $datetime1 = new DateTime($arr[$i]);
    $datetime2 = new DateTime($arr[$i + 1]);
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%R%a days');
} 
于 2012-03-29T02:27:50.903 に答える
0

このような?

     foreach($input as $k=>$i){ if(empty($input[$k-1])) continue; echo "<br /> difference between [".($k-1)."] and [".$k."] is ".'"'.round(abs(strtotime($i)-strtotime($input[$k-1]))/(3600*24)).'"'." days "; };
于 2012-03-29T02:33:35.707 に答える
0
<?php 
    $dates = array(
        '2012-04-04',
        '2012-04-06',
        '2012-04-06',
        '2012-04-06',
        '2012-04-06',
        '2012-04-06',
        '2012-04-06',
        '2012-04-11',
        '2012-04-12',
        '2012-04-12',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13'
   );

   array_walk($dates, function($item, $key) {
        static $previous = null;
        if ($previous != null) {
            $datetime1 = new DateTime($previous);
            $datetime2 = new DateTime($item);
            $interval = $datetime1->diff($datetime2);
            echo $interval->format('%R%a days') . "\n";
        } 
        $previous = $item;
   }); 

?>   
于 2012-03-29T03:47:33.717 に答える