从php数组中的给定日期获取天数

从php数组中的给定日期获取天数,php,arrays,date,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,

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

$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
);
array()(
    [0] => 0,
    [1] => 30,
    [2] => 60
    //so on ...
) 
我想得到从2016-02-01到2016-03-01的天数,然后是从2016-03-01到2016-04-01的天数,依此类推,如果您注意到这些日期之间存在一些差距,例如,它们会跳跃超过1个月。 我希望它像这样排列

$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
);
array()(
    [0] => 0,
    [1] => 30,
    [2] => 60
    //so on ...
) 
我是这样做的,但是我遇到了一些错误,比如
未初始化的字符串偏移量
,我想我这样做很可能是错误的

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

这就是您所需要的,循环遍历dates数组,然后相应地计算日期差。您的循环将比总数组大小少运行一次,从间隔开始,只需调用天并将其存储在数组中

$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);
$dates=数组(
"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;
对于($i=1;$i<计数($dates)-1;$i++){
$start_date=$dates[$i-1];
$end_Date=$dates[$i];
$date1=新日期时间($start\U date);
$date2=新日期时间($end_Date);
$interval=$date1->diff($date2);
$date[]=$interval->days;
$datez[]=数组和($date);
}
打印(日期);
打印(日期);

请检查一下,然后告诉我您是否满意。第一部分就是你所需要的。如果你不明白,那么我可以给你一个答案。@FrayneKonok抱歉,我想我没有正确地提到它,或者很难理解,但我想要的是区别,但是接下来的一个月会增加,所以基本上是0,30,60,90,所以就像前几天会增加到下几天一样。希望我做了sense@Anant对不起,我想我没有正确地提到它或者它很难理解,但是我想要的是区别,但是接下来的一个月会增加,所以基本上是0,30,60,90,所以它就像前几天会增加到下一天一样。希望我做了sense@MasnadNihit,如果我在你的try中发表评论,那么有几点需要注意$datez=,你将其初始化为数组,并在最后一次回显时像字符串一样使用它。对不起,我想我没有正确地提到它,或者它很难理解,但我想要的是区别,但接下来的一个月将添加到,所以基本上是0,30,60,90,所以它就像前几天一样,被添加到下几天。希望我能理解如果是这样你就不需要这些了。。只需简单的开始日期和结束日期的差异就可以完成您的工作。我在顶部编辑了问题,现在它在结尾处提供了更详细的信息,您能看看吗?您的问题仍然说明了我为您做了什么。Konock,您得到了两个日期之间的差异,您能通过添加以前的日期来帮助我吗?