php数组中带有一个月的日期间隔
如何在php中使用php数组中带有一个月的日期间隔,php,arrays,dateinterval,Php,Arrays,Dateinterval,如何在php中使用DateInterval获取月间隔 如果我选择2015年8月5日作为开始日期,选择2015年10月17日作为结束日期,那么我的阵列输出应分为3个阵列: 2015年8月5日至2015年8月31日的第一阵列 2015年9月1日至2015年9月30日的第二阵列 2015年10月1日至2015年10月17日的第三阵列 我们可以通过phpDateInterval函数实现这一点?如果您熟悉一些php的有用内置日期/时间类,这是非常简单的 您可以使用,并实现您的结果。例如: <?p
DateInterval
获取月间隔
如果我选择2015年8月5日作为开始日期,选择2015年10月17日作为结束日期,那么我的阵列输出应分为3个阵列:
- 2015年8月5日至2015年8月31日的第一阵列
- 2015年9月1日至2015年9月30日的第二阵列
- 2015年10月1日至2015年10月17日的第三阵列
我们可以通过php
DateInterval
函数实现这一点?如果您熟悉一些php的有用内置日期/时间类,这是非常简单的
您可以使用,并实现您的结果。例如:
<?php
// create start/end dates and interval
$start = new DateTime('05 Aug 2015');
$end = new DateTime('17 Oct 2015');
$interval = new DateInterval('P1D');
// DatePeriod excludes the last day
// so bump the end date by one
$end->modify('+1 day');
// create a DatePeriod for each day in range
$period = new DatePeriod($start, $interval, $end);
$months = [];
foreach ($period as $date) {
$months[$date->format('F')][] = $date->format('m/d/Y');
}
print_r($months);
请注意:您指定要将结果分成三个单独的数组。我假设结果将是动态的,其中月数可能会有所不同,因此我认为您最好生成一个多维结果数组
在上面的示例中,我使用月份名称作为键$date->format('F')
返回一个值
如果要获取$months
数组中包含的月份列表,只需执行以下操作:
print_r(array_keys($months));
它返回密钥,并应为您提供足够的信息,以便根据需要访问数据:
Array
(
[0] => August
[1] => September
[2] => October
)
希望这有帮助:)您可以尝试下面的代码。我不确定,但你可能会得到你想要的
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($d1, $interval, $d2);
foreach ($period as $dt) {
if($dt->format("Y-m") == date("Y-m", strtotime($date1))){
$date_array[$dt->format("Y-m")] = array(
'start_date' => $startDate,
'end_date' => $dt->format("Y-m-t"),
);
}else if($dt->format("Y-m") == date("Y-m", strtotime($date2))){
$date_array[$dt->format("Y-m")] = array(
'start_date' => $dt->format("Y-m-").'01',
'end_date' => $endDate,
);
}else{
$date_array[$dt->format("Y-m")] = array(
'start_date' => $dt->format("Y-m-").'01',
'end_date' => $dt->format("Y-m-t"),
);
}
}
foreach( $date_array as $d_key=>$da ){
/* your stuff */
}
你试过什么吗?你写过代码吗?还是你在找人做这项工作?@b0s3我尝试了太多事情,但还没有成功。事实上,我正在努力实现我的最后一个问题@Amit我不介意是否有人帮助我编写代码。我尝试了太多东西,但仍然没有得到完美的结果。这很好。发送您尝试过的内容。没问题!如果你有任何问题,请告诉我。感谢巴迪的善意帮助,并表示有兴趣减缓我的问题。
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($d1, $interval, $d2);
foreach ($period as $dt) {
if($dt->format("Y-m") == date("Y-m", strtotime($date1))){
$date_array[$dt->format("Y-m")] = array(
'start_date' => $startDate,
'end_date' => $dt->format("Y-m-t"),
);
}else if($dt->format("Y-m") == date("Y-m", strtotime($date2))){
$date_array[$dt->format("Y-m")] = array(
'start_date' => $dt->format("Y-m-").'01',
'end_date' => $endDate,
);
}else{
$date_array[$dt->format("Y-m")] = array(
'start_date' => $dt->format("Y-m-").'01',
'end_date' => $dt->format("Y-m-t"),
);
}
}
foreach( $date_array as $d_key=>$da ){
/* your stuff */
}