从这些之间的任何数字开始从1到12循环

时间:2015-04-30 15:23:30

标签: php logic

我需要获取从当月到倒退11个月的数字列表。

我试过了 -

for($m=0;$m<12;$m++) {
echo date('m', strtotime("-$m months"));
}

但是这种方法存在一个错误/问题,因为strtotime会返回重复的月份。例如对于今天的日期,它将三月返回三月。我想现在使用mktime函数并将$ m作为月份参数传递。如何获得这样的列表......当前月份数为4,因此列表变为....

4, 3, 2, 1, 12, 11, 10, 9, 8, 7, 6, 5.

我如何实现这一目标?

这是我想要实现的目标。

Apr 2015
Mar 2015
Feb 2015
Jan 2015
Dec 2014
Nov 2014
Oct 2014
Sep 2014
Aug 2014
Jul 2014
Jun 2014
May 2014

更新

我的php版本是5.2和&#34;今天&#34;&#34;日期是2015-04-30。

更新2-

我不明白这个问题是如何与链接问题重复的(由John Conde链接。你需要一个假期伴侣来让你的大脑休息一下。)。我已经看了一下这个问题,并没有解决我的问题。

2 个答案:

答案 0 :(得分:0)

我猜问题是二月有28天或29天。 我的解决方案远非防弹,但它可以满足您的需求:

for($m=0;$m< 12;$m++) {
    $days = $m * 31;
    echo date('M Y', strtotime("-$days days"))."\n";
}

输出:

Apr 2015
Mar 2015
Feb 2015
Jan 2015
Dec 2014
Nov 2014
Oct 2014
Sep 2014
Aug 2014
Jul 2014
Jun 2014
May 2014

演示:

http://ideone.com/Pl9CRP

有关更多信息,请访问PHP.net,了解date()功能。

http://php.net/manual/en/function.date.php

答案 1 :(得分:0)

你走了。只需强制它从月初开始检查,而不是当月的当天:

  $months = array();
  for ($i = 1; $i <= 12; $i++) {
    $months[] = date("M Y", strtotime(date('Y-m-01') . " -$i months"));
  }
  print_r($months);

提供以下输出:

Array
(
    [0] => Apr 2015
    [1] => Mar 2015
    [2] => Feb 2015
    [3] => Jan 2015
    [4] => Dec 2014
    [5] => Nov 2014
    [6] => Oct 2014
    [7] => Sep 2014
    [8] => Aug 2014
    [9] => Jul 2014
    [10] => Jun 2014
    [11] => May 2014
)