PHP Loop для года выпадающего

1

Я пытаюсь создать вход для выбора HTML, основанный на месяцах/годах, и я не уверен, что для него лучше всего подходит.

Хотя создание стандартного цикла лет было первым местом, которое я начал, я не был уверен, как получить последние дни каждого месяца/года, чтобы создать ценности.

Есть ли встроенные функции PHP, которые могут выполнить что-то близкое к тому, что я ищу?

Логика:

  • Должен быть в состоянии обеспечить начальный год (например, 2014 год).
  • Должен начинаться в начале года и идти через год после текущего года (например, если 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
    что ты уже испробовал? Пожалуйста, покажите некоторые усилия / попытки / код, прежде чем задавать вопрос. Это послужило бы хорошей отправной точкой для продолжения разговора.
Теги:

4 ответа

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
    Кажется, это делает то, что мне нужно. Насколько сложно изменить порядок, если бы я хотел, чтобы у него был самый ранний год? Вам не нужно менять ответ, просто ищите место, где я могу его изменить.
  • 0
    Чтобы изменить порядок года, просто замените range($from, date('Y') + 1) range(date('Y') + 1, $from, -1)
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
...
0

Используя класс DateTime вы можете создавать даты с использованием естественного языка.

Например,

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

Вы можете использовать цикл сокращения for цикла, чтобы создать много дат, возвращающихся во времени.

0

Проверьте, какая функция ниже, которая дает общее количество дней в месяц

date("t");

Более подробную информацию можно найти по адресу http://php.net/manual/en/function.date.php.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню