2013-05-29 86 views
1

我在尝试生成一个链接列表,每个月从当前月份开始一个月,并向后倒退数月。如何为前几个月的每个X数生成一个链接列表?

我有事主要工作,不同之处在于它是“退出” 2013年这里二月份是什么,我现在有一个截图:

enter image description here

下面是从代码正在生成列表视图模板:

 <?php for($i = 1; $i <= 8; $i++): ?> 
      <li> 
       <?php $prior_time = strtotime("-$i month"); ?> 
       <?php $month = date('m', $prior_time); ?> 
       <?php $year = date('Y', $prior_time); ?> 
       <?php $day = date('t', mktime(0, 0, 0, $month, 1, $year)); ?> 
       <?php $prior_month_string = date('F', $prior_time); ?> 
       <?php $prior_month_from = date('m/01/Y', $prior_time); ?> 
       <?php $prior_month_to = date("m/$day/Y", $prior_time); ?> 
       <?php if(date('F', strtotime($selected_from)) == $prior_month_string): ?> 
        <?php echo $prior_month_string; ?> 
       <?php else: ?> 
        <a href='/claims?<?php echo "from=$prior_month_from&to=$prior_month_to"; ?>' 
         data-from='<?php echo $prior_month_from; ?>' 
         data-to='<?php echo $prior_month_to; ?>'> 
         <?php echo $prior_month_string; ?> 
        </a> 
       <?php endif; ?> 
      </li> 
     <?php endfor; ?> 

有趣的是,如果我延长for遍历$i <= 18运行起来,它确实显示器2012年2月。但由于某些原因,当试图显示2013年2月时,它会显示另一个2013年3月(上图中显示的问题的示例)。

好像问题就在这里:

$prior_time = strtotime("-$i month"); 

不过,我很茫然,以为什么以及如何绕过它。为什么这个算法会在2013年3月份发布,而不是2013年2月份,我该如何解决这个问题?

回答

5

今天是29日,并且没有2013年2月29日;相当于2013年3月1日。

为了解决这个问题,我会根据每月的第一天(而不是根据今天的日期计算)生成日期。

+1

今天的好事是第29次,也不是闰年。避免未来的问题。 – j883376

+0

谢谢,好眼睛!我实现了这样的解决方案:'strtotime(“ - $ i month”,strtotime(date('m/01/y')));' – Cypher