首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取最近12个月的PHP

获取最近12个月的PHP
EN

Stack Overflow用户
提问于 2011-09-01 04:29:12
回答 4查看 32.9K关注 0票数 25

这是我今天学到的一个有趣的问题。

我需要用过去的12个月填充一个数组,从上个月开始。因此,在2011年8月,最后12个月将是2010年9月- 2011年7月。为此,我使用:

代码语言:javascript
运行
复制
for ($i = 1; $i <= 12; $i++)
    $months[] = date("Y-m%", strtotime("-$i months"));

上面的代码在8月30日运行得很好。我得到了过去的12个月:

代码语言:javascript
运行
复制
array
    0 => string '2011-07%' (length=8)
    1 => string '2011-06%' (length=8)
    2 => string '2011-05%' (length=8)
    3 => string '2011-04%' (length=8)
    4 => string '2011-03%' (length=8)
    5 => string '2011-02%' (length=8)
    6 => string '2011-01%' (length=8)
    7 => string '2010-12%' (length=8)
    8 => string '2010-11%' (length=8)
    9 => string '2010-10%' (length=8)
    10 => string '2010-09%' (length=8)
    11 => string '2010-08%' (length=8)

但是当我在8月31日运行它时,我得到:

代码语言:javascript
运行
复制
array
    0 => string '2011-07%' (length=8)
    1 => string '2011-07%' (length=8)
    2 => string '2011-05%' (length=8)
    3 => string '2011-05%' (length=8)
    4 => string '2011-03%' (length=8)
    5 => string '2011-03%' (length=8)
    6 => string '2011-01%' (length=8)
    7 => string '2010-12%' (length=8)
    8 => string '2010-12%' (length=8)
    9 => string '2010-10%' (length=8)
    10 => string '2010-10%' (length=8)
    11 => string '2010-08%' (length=8)

Windows和Unix我都试过了。有人有解决这个问题的办法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-01 04:33:16

我相信有人有一个更好的解决方案,但是你可以从这个月1号开始倒数。

代码语言:javascript
运行
复制
for ($i = 1; $i <= 12; $i++) {
    $months[] = date("Y-m%", strtotime( date( 'Y-m-01' )." -$i months"));
}
票数 75
EN

Stack Overflow用户

发布于 2011-09-01 04:32:43

这是因为不是每个月都有31号。因此,strtotime()将提前到下个月。即4/31 = 5/1。

你最好使用mktime()来完成这个任务,因为它比strtotime()更愚蠢。

更新

为了利用像strtotime()这样的智能函数,并避免跟踪mktime()的年份,以下是我的建议:

代码语言:javascript
运行
复制
$month = time();
for ($i = 1; $i <= 12; $i++) {
  $month = strtotime('last month', $month);
  $months[] = date("r", $month);
}
print_r($months);

调整逻辑并按您认为合适的方式进行优化。

票数 2
EN

Stack Overflow用户

发布于 2018-09-28 04:37:17

我认为这将会起作用:

代码语言:javascript
运行
复制
$this_month = date("n", time());
$this_year = date("Y", time());
$months_array = array();
for ($i = $this_month - 1; $i > ($this_month - 13); $i--) {
    echo "$i<br>";
    if ($i < 1) {
        $correct_month_number = $i + 12;
        $months_array[] = array($correct_month_number, $this_year - 1);
    }
    else {
        $months_array[] = array($i, $this_year);
    }
}
echo "<pre>"; var_dump($months_array); echo "</pre>";

数据类型有点松散,但这就完成了工作。这样做的好处是它只调用当前月份和年份的date()函数一次。逻辑的其余部分只是简单的数学运算。不需要担心每个月的长度。

然后,您可以使用$months_array数组来构建所需的任何内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7262971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档