0

今日の日付と時刻をフォームのドロップダウンリストに表示するためのこの長いコードがあります。それはうまくいきますが、もっと簡単な方法があるのだろうかと思っていました...?

すべての月、日、年(数年のみ)、すべての時間(24時間形式)、すべての分、すべての秒を表示したいのですが、各ドロップダウンリストで現在の日付/時刻を選択します。

<select name="event_month">
<?
$arr_m = array("January","February","March","April","May","June","July","August","September","October","November","December");
$date_m = date(m);
$count = 1;
$months = 12;
do{
    $month = $arr_m[$count-1];
    if ($date_m == $count) {
        echo ("<option value='$month' selected='selected'>$month</option>");
        } else {
        echo ("<option value='$month'>$month</option>");
    }
    $count++;
}while($count<=$months);
?></select>

<select name="start-day">
<?
$date_d = date(d);
$day=1;
$days = 31;
do{
    if($date_d == $day){
        echo ("<option value='$day' selected='selected'>$day</option>");
    }else{
        echo ("<option value='$day'>$day</option>");
    }
    $day++;
}while($day<=$days);
?></select>

<select name="start-year"><?
$date_y = date(Y);
$year =intval($date_y);
$years = $year+2;
do{
    if($date_y == $year){
        echo ("<option value='$year' selected='selected'>$year</option>");
    }else{
        echo ("<option value='$year'>$year</option>");
    }
    $year++;
}while($year<=$years);
?></select>

<select name="start-hour"><?
$date_h = date(H);
$hour = 1;
$hours = 24;
do{
    if($date_h == $hour){
        echo ("<option value='$hour' selected='selected'>$hour</option>");
    }else{
        echo ("<option value='$hour'>$hour</option>");
    }
    $hour++;
}while($hour<=$hours);
?></select>

<select name="start-min"><?
$date_min = date(i);
$min = 1;
$mins = 60;
do{
    if($date_min == $min){
        echo ("<option value='$min' selected='selected'>$min</option>");
    }else{
        echo ("<option value='$min'>$min</option>");
    }
    $min++;
}while($min<=$mins);
?></select>

<select name="start-sec"><?
$date_sec = date(s);
$sec = 1;
$secs = 60;
do{
    if($date_sec == $sec){
        echo ("<option value='$sec' selected='selected'>$sec</option>");
    }else{
        echo ("<option value='$sec'>$sec</option>");
    }
    $sec++;
}while($sec<=$secs);
?></select>

-更新- これがよりクリーンなバージョンです-ありがとう!

<select name="start-month">
<?
$arr_m = array("January","February","March","April","May","June","July","August","September","October","November","December");
$month = date('m');
for ($i = 0; $i <= 12; $i++) {
    $name = $arr_m[$i-1];
    $sel = ($i == $month) ? ' selected="selected"' : '';
    echo "<option value=\"$i\"$sel>$name</option>";
}
?>
</select>


<select name="start-day">
<?
$day = date('d');
for ($i = 0; $i <= 31; $i++) {
    $sel = ($i == $day) ? ' selected="selected"' : '';
    echo "<option value=\"$i\"$sel>$i</option>";
}
?>
</select>

<select name="start-year">
<?
$year = date('Y');
$years = $year+2;
for ($i = $year; $i <= $years; $i++) {
    $sel = ($i == $year) ? ' selected="selected"' : '';
    echo "<option value=\"$i\"$sel>$i</option>";
}
?>
</select>

<select name="start-hour">
<?
$hour = date('G');
for ($i = 0; $i <= 24; $i++) {
    $sel = ($i == $hour) ? ' selected="selected"' : '';
    echo "<option value=\"$i\"$sel>$i</option>";
}
?>
</select>

<select name="start-min">
<?
$min = date('i');
for ($i = 0; $i <= 59; $i++) {
    $sel = ($i == $min) ? ' selected="selected"' : '';
    echo "<option value=\"$i\"$sel>$i</option>";
}
?>
</select>

<select name="start-sec">
<?
$sec = date('s');
for ($i = 0; $i <= 59; $i++) {
    $sel = ($i == $sec) ? ' selected="selected"' : '';
    echo "<option value=\"$i\"$sel>$i</option>";
}
?>
</select>
4

2 に答える 2

1

LOC数を減らすためのいくつかのマイナーな最適化:

for ($i = 0; $i <= 59; $i++) {
    $sel = ($i == $sec) ? ' selected="selected"' : '';
    echo "<option value=\"$i\"$sel>$i</option>";
}

他のドロップダウンについても同様です。

于 2012-10-17T16:27:08.007 に答える
1

date()関数をどのように呼び出しているかを見てみましょう。

$date_m = date(m);

コードでは、、、などの定数を渡し続けmます。この場合、PHPは非常に寛大であるため、これは機能します。定数を検索し、それを検出せず、文字列を意味していると想定し、それを関数に渡します。dYm

コードは機能しますが、渡す値の前後に引用符を追加して問題を修正する必要がありますdate()

$date_m = date('m');

この理由は、と呼ばれる定数を定義する可能性のある将来のバグを防ぐためですm。例えば:

define('m', 'something...');

// here you would be passing something... to the date function and not m
$date_m = date(m);

コードを単純化するという点では、@MarcBの提案が良いでしょう。もう1つのオプションは、配列と選択されたオプションを引数として受け取る関数を作成し、<select>HTMLを生成することです。ドロップダウンHTMLを何度も繰り返す代わりに、配列を作成して関数を呼び出すだけなので、コード内のHTMLの繰り返しが多くなくなります。

echo getHTMLDropdown($options, $selectedOption);
于 2012-10-17T16:48:34.217 に答える