每个月的每个月的循环

时间:2011-08-11 04:25:01

标签: php date for-loop

我正在尝试在PHP中编写一个for循环,以添加到HTML <select>标记下拉列表中,以便人们选择他们的出生月份。

这是我无法正常工作的代码:

            <p>
            <label for="signup_birth_month">Birthday:</label>
            <select name="signup_birth_month" id="signup_birth_month">
            <option value="">Select Month</option>
            <?php

            for ($i = 1; $i <= 12; $i++)
            {
                $month_name = date('F', mktime(0, 0, 0, $i, 1, 2011));
                echo '<option value="'.$month_name.'"'.$month_name.'></option>';
            }

            ?>
            </select>
            </p>

如何编写一个返回年份中每个月名称的for循环?

9 个答案:

答案 0 :(得分:10)

您需要引用value密钥:

echo "<option value=\"" . $month_name . "\">" . $month_name . "</option>";

另外,我可能更喜欢这样的东西:

$months = array("Jan", "Feb", "Mar", ..., "Dec");
foreach ($months as $month) {
    echo "<option value=\"" . $month . "\">" . $month . "</option>";
}

当您知道应该是什么时,您会对datemktime进行所有不必要的调用,这似乎很奇怪。

这个数组版本具有相同的行数,并且在意图上似乎更清晰(至少对我而言)。

答案 1 :(得分:3)

for($iM =1;$iM<=12;$iM++){
echo date("M", strtotime("$iM/12/10"));}

答案 2 :(得分:1)

您是否在选择框中看到月份名称?

我认为这应该可以解决问题:

echo "<option value=\"" . $month_name . "\">" . $month_name . "</option>";

答案 3 :(得分:1)

很简单!

function getLocalMonthName($locale, $monthnum)
{
    setlocale (LC_ALL, $locale.".UTF-8");
    return ucfirst(strftime('%B', mktime(0, 0, 0, $monthnum, 1)));
}

print getLocalMonthName("pt_BR", 1); // returns Janeiro

答案 4 :(得分:0)

我认为你应该修复HTML部分。

echo '<option value="'.$month_name.'">'.$month_name.'</option>';

别忘了在

之前设置默认时区
date_default_timezone_set('Your/Timezone');

否则你会得到一个E_WARNING for date()和mktime()(如果设置了error_reporting(E_ALL))。 请查看http://www.php.net/manual/en/timezones.php获取有效时区。

或者,您也可以使用类似

的内容
$i = 1;
$month = strtotime('2011-01-01');
while($i <= 12)
{
    $month_name = date('F', $month);
    echo '<option value="'. $month_name. '">'.$month_name.'</option>';
    $month = strtotime('+1 month', $month);
    $i++;
}

但for循环很好。

答案 5 :(得分:0)

非常简单的解决方案:

print '<option value="" disabled selected>Select month</option>';
for ( $i = 1; $i <= 12; $i ++ ) { 
    print '<option value="' . $i . '">' . date( 'F', strtotime( "$i/12/10" ) ) . '</option>'; 
}

答案 6 :(得分:0)

PHP代码打印出每个月的名称:

<?php 
date_default_timezone_set('America/New_York'); 
for($i=1; $i<=12; $i++){ 
    $month = date('F', mktime(0, 0, 0, $i, 10)); 
    echo $month . ","; 
    // It will print: January,February,.............December,
}
?> 

答案 7 :(得分:0)

嘿,如果您只需要几个月的时间,又不想列出几个月的数组,则可以尝试一下

<select>

  <?php  for($i = 1; $i <= 12; $i++){  ?>
    <option value="<?= $i ?>"><?= date('M', strtotime('2020-'.$i.'-01')) ?></option>
  <?php }  ?>

</select>

答案 8 :(得分:0)

您可以使用此功能根据月份格式循环浏览月份。

function months($month_format="F"){
    $months =  [];
    for ($i = 1; $i <=12; $i++) {
        $months[] = date($month_format, mktime(0,0,0,$i));
    }
    return $months;
}


var_dump(months());
//returns
array(12) {
  [0]=>
  string(7) "January"
  [1]=>
  string(8) "February"
  [2]=>
  string(5) "March"
  [3]=>
  string(5) "April"
  [4]=>
  string(3) "May"
  [5]=>
  string(4) "June"
  [6]=>
  string(4) "July"
  [7]=>
  string(6) "August"
  [8]=>
  string(9) "September"
  [9]=>
  string(7) "October"
  [10]=>
  string(8) "November"
  [11]=>
  string(8) "December"
}



var_dump(months("M"))
//returns
array(12) {
  [0]=>
  string(3) "Jan"
  [1]=>
  string(3) "Feb"
  [2]=>
  string(3) "Mar"
  [3]=>
  string(3) "Apr"
  [4]=>
  string(3) "May"
  [5]=>
  string(3) "Jun"
  [6]=>
  string(3) "Jul"
  [7]=>
  string(3) "Aug"
  [8]=>
  string(3) "Sep"
  [9]=>
  string(3) "Oct"
  [10]=>
  string(3) "Nov"
  [11]=>
  string(3) "Dec"
}

我个人使用此函数将循环循环到关联数组中,并获取html select甚至定位所选值。

function html_selected($selected_option, $html_select_attributes, $options_and_values_array, $has_placeholder=false){
    $c = count($options_and_values_array);
    if ($has_placeholder){
        $c--;
    }
    
    if ($c===0){
        return "";
    }
    
    $select="<select $html_select_attributes>";
    foreach ($options_and_values_array as $k=>$v){
        if ((string)$k===(string)$selected_option){
            $f = "selected";
        }else{
            $f = "";
        }
        if (strpos($k,'"') !==-1){
            $dl = "'";
        }else{
            $dl = '"';
        }
        $select.="<option value=$dl".$k."$dl $f>$v</option>";    
    }
    $select.="</select>";
    
    return $select;
}

所以,你们在一起

$months = months();
echo html_selected("April","class='select-month'",array_combine($months,$months));

//returns
<select class='select-month'><option value='January' >January</option><option value='February' >February</option><option value='March' >March</option><option value='April' selected>April</option><option value='May' >May</option><option value='June' >June</option><option value='July' >July</option><option value='August' >August</option><option value='September' >September</option><option value='October' >October</option><option value='November' >November</option><option value='December' >December</option></select>