Я нашел в Интернете следующую функцию PHP для определения раскрывающегося списка календаря (в формате месяц / день / год). Функция работает нормально, но я бы хотел:
a) Сохраните выбранное значение для Месяца, Дня и Года, чтобы иметь возможность легко редактировать значения (значения определяются динамически через цикл foreach), и
б) хотел бы повторно использовать функцию для нескольких переменных (пока я использую ее для определения даты рождения, но я бы хотел использовать эту же функцию и для дополнительных полей).
Тот факт, что значения для Месяца, Дня и Года определяются динамически, меня немного смущает, и, конечно, я еще не очень хорошо разбираюсь в определении функций. Любая помощь будет принята с благодарностью!
Вот функция:
function make_calendar_pulldowns() {
// Make the months array:
$months = array (1 => 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
// Make the months pull-down menu:
//echo '<p><label for="dob" style="font-family: Verdana, Arial; font-size: 1.0em; font-weight: 600; color: #595959; line-height: 1.9em;">Date of Birth</label></p>';
echo '<select required="required" name="month" id="month" style="width: 33%; display: inline; float: left; margin-left: 1%; margin-right: 0%">';
echo '<option selected value="">Month</option>\n';
foreach ($months as $key => $value) {
echo "<option value=\"$key\" >$value</option>\n";
}
echo '</select>';
// Make the days pull-down menu:
echo '<select required="required" name="day" id="day" style="width: 33%; display: inline; float: left; margin-left: 0%; margin-right: 0%" ;>';
echo '<option selected value="">Day</option>\n';
for ($day = 1; $day <= 31; $day++) {
echo "<option value=\"$day\">$day</option>\n";
}
echo '</select>';
// Make the years pull-down menu:
echo '<select required="required" name="year" id="year" style="width: 33%; display: inline; float: left; margin-left: 0%; margin-right: 0%" ;>';
echo '<option selected value="">Year</option>\n';
for ($year = 1910; $year <= 2000; $year++) {
echo "<option value=\"$year\">$year</option>\n";
}
echo '</select>';
После определения значений я конвертирую их в формат MySQL с помощью следующего кода:
// Validate the month.
if (is_numeric ($month)) {
$dob = $month . '-';
} else {
$action['result'] = 'error';
array_push($text,'Please insert a valid Month for patient birth date');
}
// Validate the day.
if (is_numeric ($day)) {
$dob .= $day . '-';
} else {
$action['result'] = 'error';
array_push($text,'Please insert a valid Day for patient birth date');
}
// Validate the year.
if (is_numeric ($year)) {
$dob = $year . '-' . $month . '-' . $day; // Set Birthdate in SQL format
Наконец, я вызываю функцию в форме со следующим кодом:
<!-- <p><label for="dob">Date of Birth <img src="../img/req.gif" alt="Required"</label></p>
<?php make_calendar_pulldowns(); ?> -->
На самом деле некоторые его части немного отстают:
// Make the months array:
$months = array ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
// some months are a bit off, the keys are missing
// Should be something like this:
$months = array ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
$month_num = range(1, 12);
$months = array_combine($month_num, $months);
И дни жестко запрограммированы, как насчет 31 февраля?
Годы, я думаю, должно быть хорошо.
Почему бы не использовать для этой цели средство выбора даты (в частности, пользовательский интерфейс jQuery)?
$(function() {
$( "#datepicker" ).datepicker({
changeMonth: true,
changeYear: true,
dateFormat: 'yy-mm-dd', // iso format
});
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.1/jquery-ui.js"></script>
<form method="POST">
<p>Date: <input type="text" id="datepicker" name="date"></p>
<input type="submit" name="submit1" />
</form>
Других решений пока нет …