获取数组php

时间:2016-10-05 08:56:23

标签: php arrays date

我试图获取从第一个日期到第二个日期的天数,然后从第二个日期到第三个日期,依此类推。 我有这样的数组

$dates = array(
    2016 - 02 - 01,
    2016 - 03 - 01,
    2016 - 04 - 01,
    2016 - 05 - 01,
    2016 - 06 - 01,
    2016 - 07 - 01,
    2016 - 09 - 01,
    2016 - 11 - 01,
    2016 - 12 - 01,
    2017 - 01 - 01,
    2017 - 12 - 01
);

我想知道从2016-02-01到2016-03-01,然后从2016-03-01到2016-04-01等天数,如果您发现有一些空白他们的日期跳跃超过1个月。 我希望它像这样的数组

array()(
    [0] => 0,
    [1] => 30,
    [2] => 60
    //so on ...
) 

我是这样做的,但是我收到了像uninitialized string offset这样的错误,我想我的做法很可能是错误的

public  function rangeDates()
{
    $dates = array(
        '2016-02-01',
        '2016-03-01',
        '2016-04-01',
        '2016-05-01',
        '2016-06-01',
        '2016-07-01',
        '2016-09-01',
        '2016-11-01',
        '2016-12-01',
        '2017-01-01',
        '2017-12-01'
    );
    $datez = array();
    $index = 0;
    $indexone = 1;
    foreach($dates as $date)
    {
        $datez = round(abs(strtotime($date[$index]) - strtotime($date[$indexone])) / 86400);
        $index++;
        $indexone++;
    }

    echo $datez;
}

日期采用字符串格式,我忘记提及的额外信息是需要添加的日期,例如,如果我们只采用年份

array(11) (
  [0] => (int) 0
  [1] => (int) 365
  [2] => (int) 730
  [3] => (int) 1095
  [4] => (int) 1460
  [5] => (int) 1825
  [6] => (int) 2190
  [7] => (int) 2555
  [8] => (int) 2920
  [9] => (int) 3285
  [10] => (int) 3650

1 个答案:

答案 0 :(得分:5)

这就是你需要的,循环遍历日期数组然后相应地计算日期的差异。你的循环将运行一个总数组大小的一小部分,从调用天数的间隔开始并将其存储在一个数组中。

$dates = array(
    "2016-02-01",
    "2016-03-01",
    "2016-04-01",
    "2016-05-01",
    "2016-06-01",
    "2016-07-01",
    "2016-09-01",
    "2016-11-01",
    "2016-12-01",
    "2017-01-01",
    "2017-12-01"
);

$datez = array();
$date = array();
$datez[] = 0;

for($i = 1; $i < count($dates) - 1; $i++){
    $start_date = $dates[$i-1];
    $end_Date = $dates[$i];

    $date1 = new DateTime($start_date);
    $date2 = new DateTime($end_Date);
    $interval = $date1->diff($date2);

    $date[]  = $interval->days;
    $datez[] = array_sum($date);
}

print_r($date);
print_r($datez);

Online Example