【问题标题】:PHP Loop for Year Dropdown年度 PHP 循环下拉列表
【发布时间】:2015-12-10 16:29:20
【问题描述】:

我正在尝试根据月/年创建 HTML 选择输入,但我不确定最佳方法。

虽然创建标准年循环是我开始的第一个地方,但我不确定如何获取每个月/年的最后几天以创建值。

是否有任何内置的 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>

【问题讨论】:

  • 到目前为止您尝试过什么?请在提出问题之前展示一些努力/尝试/代码。这将提供一个不错的起点,我们可以在此基础上扩展对话。

标签: php


【解决方案1】:

这个函数应该做的:

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>";
}

【讨论】:

  • 这似乎正是我所需要的。如果我想让最早的年份在底部,那么更改顺序有多难?你不需要改变答案,只要寻找我可以改变它的地方。
  • 要颠倒年份顺序,只需将range($from, date('Y') + 1)替换为range(date('Y') + 1, $from, -1)
【解决方案2】:

这里有一个更优雅的方式

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
...

【讨论】:

    【解决方案3】:

    使用DateTime 类,您可以使用自然语言创建日期。

    例如,

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

    您可以使用递减的for 循环来创建许多可追溯的日期。

    【讨论】:

      【解决方案4】:

      检查下面给出一个月总天数的函数

      date("t");

      更多详情请访问http://php.net/manual/en/function.date.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-22
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多