2013-05-29 131 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