2015-12-10 89 views
1

我想創建一個基於月/年的HTML選擇輸入,我不確定它的最佳方法。PHP Loop for Year Dropdown

雖然創建一個標準的年數循環是我開始的第一個地方,但我不確定如何獲得每月/每年的最後幾天以創建值。

是否有任何內置的PHP函數可以完成接近我正在尋找的內容?

邏輯:

  • 必須能夠提供一個起始年(例如2014年)。
  • 必須從開始年份開始,並在當前年度過去1年(例如,如果Start = 2014,它將顯示2014,2015,2016。
  • 該選項的值必須是該月的最後一天日期格式(例如:<option value="01/31/2015">January 2015</option>

輸出:。

<select class="s2 span4" name="desiredCompletion" placeholder="Select a Desired Completion Date"> 
    <optgroup label="2016"> 
    <option value="01/31/2016">Janurary 2016</option> 
    <option value="02/28/2016">Feburary 2016</option> 
    <option value="03/31/2016">March 2016</option> 
    ... 
    </optgroup> 
    <optgroup label="2015"> 
    <option value="01/31/2015">Janurary 2015</option> 
    <option value="02/28/2015">Feburary 2015</option> 
    <option value="03/31/2015">March 2015</option> 
    ... 
    </optgroup> 
    <optgroup label="2014"> 
    <option value="01/31/2014">Janurary 2014</option> 
    <option value="02/28/2014">Feburary 2014</option> 
    <option value="03/31/2014">March 2014</option> 
    ... 
    </optgroup> 
</select> 
+0

你到目前爲止試過了什麼?請在提出問題前展示一些努力/嘗試/代碼。這將提供一個體面的起點,我們可以在這個起點上延長對話。 – starlocke

回答

3

這個功能應該做的:低於

function createYearSelect($from) { 
    // open select 
    echo "<select class=\"s2 span4\" name=\"desiredCompletion\" placeholder=\"Select a Desired Completion Date\">"; 

    // for each year from the one specified to the one after current 
    foreach(range($from, date('Y') + 1) as $year) { 
     // open optgroup for year 
     echo "<optgroup label=\"$year\">"; 

     // foreach month 
     foreach (range(1, 12) as $month) { 
      // timestamp of first day 
      $time = strtotime("$year-$month-01"); 

      // create option with date() formatting 
      echo "<option value=\"".date("m/t/Y", $time)."\">".date("F Y", $time)."</option>"; 
     } 

     // close optgroup for year 
     echo "</optgroup>"; 
    } 

    // close select 
    echo "</select>"; 
} 
+0

這似乎只是做我需要的。如果我想讓它的底部最早的一年有多難改變訂單?你不需要改變答案,只是尋找我可以改變它的地方。 – SBB

+0

爲了逆轉年份順序,只需用'range(date('Y')+1,$ from,-1)替換'range($ from,date('Y'+ 1)'''' –

0

使用DateTime類,你可以使用自然語言創建日期

例如,

$date = new DateTime("-1 Year"); 
echo $date->format('F Y'); // Prints 'December 2014' 

您可以使用一個遞減for循環來創造出許多日期時光倒流。

1

這裏有點更優雅的方式

foreach(range(2014, 2015) as $year){ 
    foreach(range(1, 12) as $month){ 
     echo date('Y.m.d', strtotime('Last day of ' . date('F', strtotime($year . '-' . $month . '-01')) . $year)) . PHP_EOL; 
    } 
} 

這種輸出的幾個月在指定範圍內的年的最後幾天列表。

2014.01.31 
2014.02.28 
2014.03.31 
2014.04.30 
...