Я пытаюсь создать вход для выбора 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("FY", $time)."</option>"; } // close optgroup for year echo "</optgroup>"; } // close select echo "</select>"; }
Вот несколько более элегантный способ
foreach(range(2014, 2015) as $year){ foreach(range(1, 12) as $month){ echo date('Ymd', 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.