【问题标题】:How to get all days, months, and years in a drop down?如何在下拉列表中获取所有天、月和年?
【发布时间】:2011-03-28 17:56:42
【问题描述】:

是否有一个类或 php 脚本会在所有的日子、几个月和几年的时间里在下拉字段中回显。我需要将它们用于出生日期字段。我用谷歌搜索,但没有发现我可以实施或学习的东西。有任何想法吗?谢谢

【问题讨论】:

  • 仍然不确定您需要做什么?这是在客户端还是服务器端?
  • 我正在使用它作为注册表单。你知道你有你的出生日期字段。所以我希望能够在该字段中显示截至当前日期的所有天、月、年。
  • PHP 不是最好的选择,因为每个月的天数不同。选择Month 时,您必须提交表单才能获得正确的Day 计数。
  • 好的,假设您允许 120 岁的人注册,您的下拉框中有 365*120 = 43,800 行。彻底疯了。最好将其拆分为单独的日/月/年字段,否则您将破坏互联网发送那么多 <option> 集。然后不要忘记闰年,它还有大约 30 个选项字段,总共 44,100 个。
  • @Marc B:我认为当你应该添加时,你正在乘以。 ;) 120 + 12 + 31 .. 我怀疑他会用:2011-03-282011-03-272011-03-26 等制作单曲 <select>

标签: php calendar


【解决方案1】:

我知道这是一个老问题,但也许这会有所帮助。

var_dump(cal_info(CAL_GREGORIAN )['months']);

http://php.net/manual/en/function.cal-info.php

http://php.net/manual/en/ref.calendar.php

【讨论】:

    【解决方案2】:

    如果你真的只是想用 PHP 完成,这里有一个简单的开始:

    <?php
        // lowest year wanted
        $cutoff = 1910;
    
        // current year
        $now = date('Y');
    
        // build years menu
        echo '<select name="year">' . PHP_EOL;
        for ($y=$now; $y>=$cutoff; $y--) {
            echo '  <option value="' . $y . '">' . $y . '</option>' . PHP_EOL;
        }
        echo '</select>' . PHP_EOL;
    
        // build months menu
        echo '<select name="month">' . PHP_EOL;
        for ($m=1; $m<=12; $m++) {
            echo '  <option value="' . $m . '">' . date('M', mktime(0,0,0,$m)) . '</option>' . PHP_EOL;
        }
        echo '</select>' . PHP_EOL;
    
        // build days menu
        echo '<select name="day">' . PHP_EOL;
        for ($d=1; $d<=31; $d++) {
            echo '  <option value="' . $d . '">' . $d . '</option>' . PHP_EOL;
        }
        echo '</select>' . PHP_EOL;
    ?>
    

    另一种方法,类似的输出:
    (年份将按升序排列,而不是降序排列)

    <?php
        $build = array(
            array('year', '1910', date('Y'), 'Y'),
            array('month', '1', '12', 'M'),
            array('day', '1', '31', 'j')
        );
        $doc = new DOMDocument();
        foreach ($build as $item) {
            $menu = $doc->createElement('select');
            $menu->setAttribute('name', $item[0]);
            for ($x=$item[1]; $x<=$item[2]; $x++) {
                $b = $item[3];
                $opt = $doc->createElement('option');
                $opt->setAttribute('value', $x);
                $opt->nodeValue = date($item[3], mktime(0,0,0,($b=='M'?$x:1),($b=='j'?$x:1),($b=='Y'?$x:1)));
                $menu->appendChild($opt);
            }
            $doc->appendChild($menu);
        }
        echo $doc->saveHTML();
    ?>
    

    【讨论】:

    • 这个仍然有效,但要插入 mysql DATE 字段,您需要前导零。用: sprintf("%02d", $num);在回显 $m 和 $d 之前,在 FOR 循环内。
    【解决方案3】:

    与其使用三个不同的&lt;select&gt;,这不是一个非常用户友好的解决方案,为什么不使用一些基于Javascript的日历小部件?


    比如jQuery Datepicker我听过不少次——效果要好得多,你不觉得吗:

         
    (来源:pascal-martin.fr

    (这只是我链接到的页面上演示的屏幕截图;您可以调整几个选项)

    【讨论】:

    • 是的,我在谷歌搜索时发现了这一点,但我想要一个下拉菜单之类的东西。这是出生日期,所以想象一下,如果您出生于 1943 年,您将不得不不断来回滚动...
    • 我相信您只需在文本字段中输入1943,它就会调整到适当的年份。
    • @AAA:我相信如果您将altFormat 选项设置为YYYY-MM-DD,那么您可以开始输入年份并让它自动调整。
    • 如果它可以重复使用,那将是一个更好的远击选择
    【解决方案4】:

    主题是旧的,但会在接受的答案中说要添加

    日期('M', mktime(0,0,0,$m))

    -->

    日期('M', mktime(0,0,0,$m,1))

    因为在 29 日、30 日和 31 日,标签会出错。 PHP 将当前日期作为默认值,并将返回缺少这一天的错误月份。 PHP 会将其解释为月份 + 1 天,并将显示下个月

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      相关资源
      最近更新 更多