Php 有没有比我更简单的方法来获取两个日期之间的所有月份和年份列表

Php 有没有比我更简单的方法来获取两个日期之间的所有月份和年份列表,php,datetime,datediff,Php,Datetime,Datediff,我希望在两个日期之间的数组中依次获取所有月份和年份。我想要这样的输出格式:Y-m 我做到了。但是,我只想知道有没有简单的方法可以得到同样的结果 这是我的代码: public function __construct() { $this->params['start-date'] = date('Y-m-d', strtotime("01-01-2016")); $this->params['end-date'] = date('Y-m-d', time()); }

我希望在两个日期之间的数组中依次获取所有月份和年份。我想要这样的输出格式:Y-m

我做到了。但是,我只想知道有没有简单的方法可以得到同样的结果

这是我的代码:

public function __construct()
{
    $this->params['start-date'] = date('Y-m-d', strtotime("01-01-2016"));
    $this->params['end-date'] = date('Y-m-d', time());
}

/**
 * @return array
 */
private function _getAllMonths()
{
    $start  = date_parse($this->params["start-date"]);
    $end  = date_parse($this->params["end-date"]);

    $output[] = ['month' => $start["year"]."-0".$start["month"]];
    //loop years
    for($i=(int)$start["year"];$i<=(int)$end["year"];$i++)
    {
        //control months and start year
        $k = $i == $start["year"] ? (int)$start["month"] + 1 : 1;
        //loop months
        for($j=$k;$j<13;$j++)
        {
            if($i==$end["year"] && $j==$end["month"])
                break;
            $output[] = ["month" => $i."-".str_pad($j, 2, "0", STR_PAD_LEFT)];
        }
    }
    return $output;
}
public function\uuuu construct()
{
$this->params['start-date']=日期('Y-m-d',strttime(“01-01-2016”);
$this->params['end-date']=date('Y-m-d',time());
}
/**
*@return数组
*/
私有函数_getAllMonths()
{
$start=date_parse($this->params[“start date”]);
$end=date_parse($this->params[“end date”]);
$output[]=['month'=>$start[“year”]。“-0”。$start[“month”];
//循环年

对于($i=(int)$start[“year”];$i这个如何让你开始

$start = new \DateTime('now');
$end = new \DateTime('now + 3 years');
$interval = new \DateInterval('P1M');
$period = new \DatePeriod($start, $interval, $end);

foreach($period as $date) {
    echo $date->format('Y-m-d H:i:s') . "\n";
}
要使它适应您的需要,这不是一个很大的步骤

PHP手册页


  • 如果你在约会方面做了很多事情,我推荐一个名为

    的图书馆,这样你就可以开始了

    $start = new \DateTime('now');
    $end = new \DateTime('now + 3 years');
    $interval = new \DateInterval('P1M');
    $period = new \DatePeriod($start, $interval, $end);
    
    foreach($period as $date) {
        echo $date->format('Y-m-d H:i:s') . "\n";
    }
    
    要使它适应您的需要,这不是一个很大的步骤

    PHP手册页


  • 如果你对日期做了很多工作,我推荐一个名为

    的库,你的问题的答案是使用DateTime对象或时间戳而不是字符串进行YESWorking将是一个很大的改进。@RiggsFolly,以及如何进行?你的问题的答案是使用DateTime对象或时间戳而不是字符串进行YESWorking将是一个很大的改进。@RiggsF奥利,怎么说?谢谢!它运行得很好!你能解释一下这一行吗:$interval=new\DateInterval('P1M');我将研究所有类和碳库。非常感谢!这一行的意思是“我想有一个周期1个月”你可以找到更多的幸运朋友,我已经在PHP上工作了20多年了(omg)我一直在学习新东西,谢谢!它运行得很好!你能解释一下这一行吗:$interval=new\DateInterval('P1M');我将研究所有课程和碳库。非常感谢!这一行的意思是“我希望有一个1个月的周期”你可以找到更多的幸运朋友,我已经在PHP工作了20多年了(omg),我一直在学习新的东西