【问题标题】:Is there any more simple way to get all months and years list between two dates then mine有没有更简单的方法来获取两个日期之间的所有月份和年份列表,然后是我的
【发布时间】:2018-04-06 11:43:32
【问题描述】:

我想在两个日期之间的数组中依次获取所有月份和年份。我想要这种格式的输出: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;
}

请解释一下如何?

【问题讨论】:

  • 你的问题的答案是肯定的
  • 使用 DateTime 对象或时间戳而不是字符串将是一个很大的改进。
  • @RiggsFolly,以及如何?

标签: php datetime datediff


【解决方案1】:

如何让你开始

$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 手册页

  1. DateTime
  2. DateInterval
  3. DatePeriod

如果您对日期做很多事情,我推荐一个名为 Carbon 的库

【讨论】:

  • 谢谢!它运行完美!你能解释一下这一行吗:$interval = new \DateInterval('P1M');
  • 我会研究所有的类和碳库。非常感谢!
  • 该行的意思是“我想有一个Period 1 Month的间隔”你可以找到更多here
  • 祝你好运朋友,我已经使用 PHP 20 多年了(天哪),我一直在学习新事物
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 2019-06-05
  • 2020-01-21
相关资源
最近更新 更多