Я пытаюсь создать вход для выбора HTML, основанный на месяцах/годах, и я не уверен, что для него лучше всего подходит.
Хотя создание стандартного цикла лет было первым местом, которое я начал, я не был уверен, как получить последние дни каждого месяца/года, чтобы создать ценности.
Есть ли встроенные функции PHP, которые могут выполнить что-то близкое к тому, что я ищу?
Логика:
<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>
Эта функция должна:
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)
Здесь немного более элегантный способ
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
...
Используя класс DateTime
вы можете создавать даты с использованием естественного языка.
Например,
$date = new DateTime("-1 Year");
echo $date->format('F Y'); // Prints 'December 2014'
Вы можете использовать цикл сокращения for
цикла, чтобы создать много дат, возвращающихся во времени.
Проверьте, какая функция ниже, которая дает общее количество дней в месяц
date("t")
;
Более подробную информацию можно найти по адресу http://php.net/manual/en/function.date.php.