【问题标题】:Create a dropdown for months using a php function.使用 php 函数创建几个月的下拉列表。
【发布时间】:2016-01-09 12:30:22
【问题描述】:

我正在使用这个函数来创建一个下拉列表几个月。

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>

谁能告诉我如何修改这个功能。 谢谢你。

【问题讨论】:

    标签: php dropdown


    【解决方案1】:

    试试下面的代码:

    <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>
    

    【讨论】:

    • 奇怪,它首先列出了当前月份(二月)。然后,一月是选项的底部。
    【解决方案2】:

    如果您查看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-attribute 中的date('F', $month) 替换为date('n', $month)

    【讨论】:

      【解决方案3】:

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

      <?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();
      
      ?>
      

      【讨论】:

        【解决方案4】:

        这是你的答案:-

        <?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();    
        ?>
        

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

        如果你写&lt;?php echo months('march'); ?&gt;,那么march将默认被选中。

        【讨论】:

          【解决方案5】:
          <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>
          

          如果那是你想要的。

          享受吧!

          【讨论】:

          • 这不值得反对。我认为编写一个函数来返回像这样的静态和相对较小的东西是矫枉过正的。只需对字符串进行硬编码。它是最易读和管理的代码。
          • 原来的问题是通过php代码提供解决方案。
          【解决方案6】:
          <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>
          

          更多详情请点击here

          【讨论】:

            【解决方案7】:
            <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>
            

            【讨论】:

            • edit你的答案也添加一些解释。
            【解决方案8】:

            我在这里尝试了一些答案,但他们没有给我正确的解决方案来显示几个月的数组。 例如,@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>  
            

            【讨论】:

              【解决方案9】:
              for($i=1; $i<=12; $i++)
              {
              echo '<option value="'.date('m', strtotime('2020-'.$i.'-01')).'">'.date('M', strtotime('2020-'.$i.'-01')).'</option>';  
              }
              

              【讨论】:

              • edit你的答案也添加一些解释。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-08-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-02-24
              • 1970-01-01
              相关资源
              最近更新 更多