从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,您得到了两个日期之间的差异,您能通过添加以前的日期来帮助我吗?