Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php数组中带有一个月的日期间隔_Php_Arrays_Dateinterval - Fatal编程技术网

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

如何在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日的第三阵列

我们可以通过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 */
}