0

我正在绘制条形图,x 轴上的值是过去一年的月份。例如,这是 2014 年 3 月;所以 x 轴上的值范围从 2013 年 4 月到 2014 年 3 月,即当月。

我正在使用echo date('M');打印当前月份echo date('M', strtotime(' -1 month'));等等echo date('M', strtotime(' -2 month'));来获取之前的所有月份。

这些一直运行良好,直到今天,3 月 29 日。

'Feb' 应该在的地方也打印 'Mar'。我想这是因为二月有 28 天。

是否有一个简单的解决方法,而不必在所有告诉它的语句上使用if... else语句或if... else速记语句?echoecho date('M', strtotime('-n month 2 days'));

4

1 回答 1

4

这是由于 PHP 如何处理日期数学。您需要确保始终在每月的第一天工作,以确保不会跳过二月。

DateTime(), DateInterval(), 并且DatePeriod()使这很容易做到:

$start    = new DateTime('11 months ago');
// So you don't skip February if today is day the 29th, 30th, or 31st
$start->modify('first day of this month'); 
$end      = new DateTime();
$interval = new DateInterval('P1M');
$period   = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
    echo $dt->format('F Y') . "<br>";
}

看到它在行动

您显然可以更改$dt->format('F Y')$dt->format('M')适合您的特定目的。我显示了月份和年份来演示它是如何工作的。

于 2014-03-29T18:33:36.393 回答