使用php函数创建一个月的下拉列表


Create a dropdown for months using a php function.

我正在使用此函数创建一个月的下拉列表。

function formMonth(){
  $month = strtotime(date('Y').'-'.date('m').'-'.date('j').' - 12 months');
  $end = strtotime(date('Y').'-'.date('m').'-'.date('j').' + 0 months');
  while($month < $end){
      $selected = (date('F', $month)==date('F'))? ' selected' :'';
      echo '<option'.$selected.' value="'.date('F', $month).'">'.date('F', $month).'</option>'."'n";
      $month = strtotime("+1 month", $month);
  }
}

我的问题是,我需要使用1到12的数值作为选项值。

此时,它使用月份名称作为value选项,如下所示。

<select size="1" name="month">
<option selected value="January">January</option>
<option value="February">February</option>
<option value="March">March</option>
<option value="April">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>

有人能告诉我如何修改这个函数吗。非常感谢。

尝试以下代码:

<select name="month" size='1'>
    <?php
    for ($i = 0; $i < 12; $i++) {
        $time = strtotime(sprintf('%d months', $i));   
        $label = date('F', $time);   
        $value = date('n', $time);
        echo "<option value='$value'>$label</option>";
    }
    ?>
</select>

如果您查看date()的文档,您会在"格式"下看到,您可以使用n来表示从1到12的月份。(您也可以使用m作为前导零(01-12))。

这意味着你基本上只需要更改

echo '<option'.$selected.' value="'.date('F', $month).'">'.date('F', $month).'</option>'."'n";

echo '<option'.$selected.' value="'.date('n', $month).'">'.date('F', $month).'</option>'."'n";

在您当前的代码中,假设它按预期工作(我所做的只是将values-属性中的date('F', $month)替换为date('n', $month).

试试这个:你的问题解决了。

<?php
function formMonth(){
  $month = strtotime(date('Y').'-'.date('m').'-'.date('j').' - 12 months');
  $end = strtotime(date('Y').'-'.date('m').'-'.date('j').' + 0 months');
  $val=1;
  echo "<select>";
  while($month < $end){
      $selected = (date('F', $month)==date('F'))? ' selected' :'';
      echo '<option'.$selected.' value='.$val.'>'.date('F', $month).'</option>'."'n";
      $month = strtotime("+1 month", $month);
       $val++;
  }
   echo "</select>";
}
formMonth();
?>

以下是您的答案:-

<?php
function months($selctedMonth='january'){
    $months='<select name="month" size="1">';
    for ($i = 12; $i > 0; $i--) {
        $time = strtotime(sprintf('-%d months', $i));   
        $label = date('F', $time); 
        $selctedM = strtolower($selctedMonth) == strtolower($label) ? 'selected' : '';
        $months.="<option value='$label'  $selctedM >$label</option>";
    }  
    $months.="</select>";
    return $months;
}
 echo months();    
?>

默认情况下,一月将显示为选中。

如果您写入<?php echo months('march'); ?>,则默认情况下会选择march

<select size="1" name="month">
<option selected value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>

如果这是你想要的。

享受吧!

<div class="form-group">
          <label>Month:</label>
          <select id="month" name="month" class="form-control select2" style="width: 100%;">
            <option value=""></option>
            <?php
            $monthArray = range(1, 12);
            foreach ($monthArray as $month) {
              $monthPadding = str_pad($month, 2, "0", STR_PAD_LEFT);
              $fdate = date("F", strtotime("2015-$monthPadding-01"));
                echo '<option value="'.$monthPadding.'">'.$fdate.'</option>';
            }?>
          </select>
        </div>

有关更多细节,请单击此处

<select name="month">
<?php
foreach (['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] as $monthNumber => $month) {
    echo "<option value='$monthNumber'>{$month}</option>";
}
?>
</select>

我在这里尝试了一些答案,但它们没有给我显示月份数组的正确解决方案。例如,@Kausha-Mehta解决方案输出了这个。

<select name="month" size="1">
<option value="7">July</option>
<option value="8">August</option>
<option value="10">October</option>
<option value="10">October</option>
<option value="12">December</option>
<option value="12">December</option>
<option value="1">January</option>
<option value="3">March</option>
<option value="3">March</option>
<option value="5">May</option>
<option value="5">May</option>
<option value="7">July</option>
</select>

这似乎跳过了几个月,重复了几个月。

但这是意料之中的事

        <select id="month" name="month" autocomplete='off'>
            <?php
    // Create a dropdown for months using a php foreach.
$monthArray  = range(1, 12);
//::::
   foreach ($monthArray as  $month):
   
       $monthCode = str_pad($month, 2, "0", STR_PAD_LEFT);
       $selected = ($monthCode === date('m')) ? 'selected' : '';  
//All months start with 1
        $date = new DateTime(date("Y-").$monthCode."-01");
       print '<option '.$selected.' value="'.$monthCode.'">'.$date->format('F').'</option>';
 endforeach;
            
    
    ?>
        </select>  
for($i=1; $i<=12; $i++)
{
echo '<option value="'.date('m', strtotime('2020-'.$i.'-01')).'">'.date('M', strtotime('2020-'.$i.'-01')).'</option>';  
}