使用日期的语法

时间:2014-12-18 00:02:49

标签: php arrays

在我正在处理的项目的一部分上遇到语法问题。我正在为我正在创建的图表创建标签。出于某种原因,它总是跳过1月的第一个实例,从12月1日,2月开始打印数组。当它执行第二个实例时,它打印出来就好了。

这是我不能解决问题的代码部分。 这些日期是2014年12月 - 2016年9月

/* Create labels for the graph */
    $mlist = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');

    $minyear = date("y", strtotime($min_date));

    for ($i = $minimum_month; $i < $maximum_month; $i++) {
        if ($i > 12) {
            $months[] = '"' . $mlist[($i % 12)] . ' ' . ($min_year + (($i - ($i % 12)) / 12)) . '"';
        } else {
            $months[] = '"' . $mlist[($i - 1)] . ' ' . $min_year . '"';
        }
    }
    $months_labels = implode(',', $months);

这是输出:

&#34; 2014年12月&#34;,&#34; 2015年2月&#34;,&#34; 2015年3月&#34;,&#34; 2015年4月&#34;,&#34; 2015年5月&# 34;,&#34; 2015年6月&#34;,&#34; 2015年7月&#34;,&#34; 2015年8月&#34;,&#34; 2015年9月&#34;,&#34; 2015年10月&# 34;,&#34; 2015年11月&#34;,&#34; 2015年12月&#34;,&#34; 2016年1月&#34;,&#34; 2016年2月&#34;,&#34; 2016年3月&# 34;,&#34; 2016年4月&#34;,&#34; 2016年5月&#34;,&#34; 2016年6月&#34;,&#34; 2016年7月&#34;,&#34; 2016年8月&# 34;,&#34; 2016年9月&#34;

这是数月:

Array
(
    [0] => "Dec 2014"
    [1] => "Feb 2015"
    [2] => "Mar 2015"
    [3] => "Apr 2015"
    [4] => "May 2015"
    [5] => "June 2015"
    [6] => "Jul 2015"
    [7] => "Aug 2015"
    [8] => "Sep 2015"
    [9] => "Oct 2015"
    [10] => "Nov 2015"
    [11] => "Dec 2015"
    [12] => "Jan 2016"
    [13] => "Feb 2016"
    [14] => "Mar 2016"
    [15] => "Apr 2016"
    [16] => "May 2016"
    [17] => "June 2016"
    [18] => "Jul 2016"
    [19] => "Aug 2016"
    [20] => "Sep 2016"
)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

使用DatePeriod从开始日期到结束日期迭代1个月(&#34; P1M&#34;)。 将开始日期和月数设置为正确的。

$months = 17;
$start = DateTime::createFromFormat("Y-m-d", "2014-11-01");
$end = clone $start;
$end = $end->modify(sprintf("+%d months", $months));
$interval = new DateInterval("P1M");

$iterator = new DatePeriod($start, $interval, $end);

foreach ($iterator as $date) {
    echo $date->format("M Y"), "\n";
}

在某处设置时区:

date_default_timezone_set("Europe/Oslo");

结果:

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