这是我今天学到的一个有趣的问题。
我需要用过去的12个月填充一个数组,从上个月开始。因此,在2011年8月,最后12个月将是2010年9月- 2011年7月。为此,我使用:
for ($i = 1; $i <= 12; $i++)
$months[] = date("Y-m%", strtotime("-$i months"));
上面的代码在8月30日运行得很好。我得到了过去的12个月:
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日运行它时,我得到:
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我都试过了。有人有解决这个问题的办法吗?
发布于 2011-09-01 04:33:16
我相信有人有一个更好的解决方案,但是你可以从这个月1号开始倒数。
for ($i = 1; $i <= 12; $i++) {
$months[] = date("Y-m%", strtotime( date( 'Y-m-01' )." -$i months"));
}
发布于 2011-09-01 04:32:43
这是因为不是每个月都有31号。因此,strtotime()
将提前到下个月。即4/31 = 5/1。
你最好使用mktime()
来完成这个任务,因为它比strtotime()
更愚蠢。
更新
为了利用像strtotime()
这样的智能函数,并避免跟踪mktime()
的年份,以下是我的建议:
$month = time();
for ($i = 1; $i <= 12; $i++) {
$month = strtotime('last month', $month);
$months[] = date("r", $month);
}
print_r($months);
调整逻辑并按您认为合适的方式进行优化。
发布于 2018-09-28 04:37:17
我认为这将会起作用:
$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数组来构建所需的任何内容。
https://stackoverflow.com/questions/7262971
复制相似问题