PHP日期差异,保存在数组中的每一天之间


PHP Date difference , save each day between in array

我有一个数组,其中每个元素包含一个以'dd.mm.yy'格式的开始日期和结束日期。

 Array
    (
        [0] =
            (
                [date_start] = 23.07.2014
                [date_end] = 02.08.2014
            )
     )

现在我需要构建一个数组,该数组将包含date_start和date_end之间的每一天,以便稍后验证它们。

现在我的问题是我如何计算这些日期之间的每一天并将其保存到数组?

如果你只想要日期差异

<?php
        $arr=array
        (
            array
                (
                    'date_start' =>'23.07.2014',
                    'date_end' =>'02.08.2014'
                ),
            array
            (
                'date_start' =>'15.07.2014',
                'date_end' =>'02.08.2014'
            )
         );
         foreach($arr as $key=>$val){
            $diff=strtotime($val['date_end'])-strtotime($val['date_start']);
            $new_arr[]=array(
                                'day_start'=>$val['date_start'],
                                'day_end'=>$val['date_end'],
                                'difference'=>$diff/(24*60*60)-1
                            );  
         }
         print_r($new_arr);
    ?>

输出
Array
(
    [0] => Array
        (
            [day_start] => 23.07.2014
            [day_end] => 02.08.2014
            [difference] => 9
        )
    [1] => Array
        (
            [day_start] => 15.07.2014
            [day_end] => 02.08.2014
            [difference] => 17
        )
)

<?php
    $arr=array
    (
        array
            (
                'date_start' =>'23.07.2014',
                'date_end' =>'02.08.2014'
            ),
        array
        (
            'date_start' =>'15.07.2014',
            'date_end' =>'02.08.2014'
        )
     );
     foreach($arr as $key=>$val){
        $diff=strtotime($val['date_end'])-strtotime($val['date_start']);
        $day_diff=$diff/(24*60*60);
        $alldiff=array();
        for($i=1;$i<=$day_diff-1;$i++){
            $alldiff[]=date('d.m.Y',(strtotime($val['date_start'])+$i*24*60*60));
        }
            $new_arr[]=array(
                                'day_start'=>$val['date_start'],
                                'day_end'=>$val['date_end'],
                                'difference'=>$alldiff
                            );  
     }
     echo "<pre>";
     print_r($new_arr);
?>

输出
Array
(
    [0] => Array
        (
            [day_start] => 23.07.2014
            [day_end] => 02.08.2014
            [difference] => Array
                (
                    [0] => 24.07.2014
                    [1] => 25.07.2014
                    [2] => 26.07.2014
                    [3] => 27.07.2014
                    [4] => 28.07.2014
                    [5] => 29.07.2014
                    [6] => 30.07.2014
                    [7] => 31.07.2014
                    [8] => 01.08.2014
                )
        )
    [1] => Array
        (
            [day_start] => 15.07.2014
            [day_end] => 02.08.2014
            [difference] => Array
                (
                    [0] => 16.07.2014
                    [1] => 17.07.2014
                    [2] => 18.07.2014
                    [3] => 19.07.2014
                    [4] => 20.07.2014
                    [5] => 21.07.2014
                    [6] => 22.07.2014
                    [7] => 23.07.2014
                    [8] => 24.07.2014
                    [9] => 25.07.2014
                    [10] => 26.07.2014
                    [11] => 27.07.2014
                    [12] => 28.07.2014
                    [13] => 29.07.2014
                    [14] => 30.07.2014
                    [15] => 31.07.2014
                    [16] => 01.08.2014
                )
        )
)

应该可以:

$startDate = new DateTime('2014-05-01');
$endDate  = new DateTime('2014-06-02');
 // calculate diff
$diff = $startDate->diff($endDate);
$daysDiff = $diff->days;

for ($i = 0; $i < $daysDiff; $i++) {
    // clone so the original date will not be changed
    $currentDate = clone $startDate;
    $currentDate->modify('+'.$i.' days');
    echo $currentDate->format('Y-m-d H:i:s')."'n";
}

现在你只需要为每个数组条目做这个并保存到数组

为什么不将日期转换为时间戳,然后按天秒数从timestamp_start循环到timestamp_end,然后将每一步转换为一个新的日期以稍后检查

像这样?

// Convert start and end dates to unix timestamp
$start = strptime($date_array[0]['date_start'], '%d.%m.%Y');
$end = strptime($date_array[0]['date_end'], '%d.%m.%Y');
$dates = array();
while ($start < $end){
  $dates[] = date('d.m.Y', $start);
  $start += 86400 // One day equals 86400 seconds
}

试试这个,因为它为我工作

function getDates($startTime, $endTime) {
$day = 86400;
$format = 'd.m.Y';
$startTime = strtotime($startTime);
$endTime = strtotime($endTime);
$numDays = round(($endTime - $startTime) / $day);  
$days = array();
for ($i = 1; $i < $numDays; $i++) { 
    $days[] = date($format, ($startTime + ($i * $day)));
}
return $days; 

}

$天=获取当前日期("23.07.2014"、"02.08.2014");