如何在一个下拉菜单中获得所有的日子,月份和年份?

问题描述:

是否有一个类或php脚本会在下拉字段中回复所有日期,月份和年份。我需要将它们用于出生日期字段。我google搜索,但没有出现,我可以实施或从中学习。有任何想法吗?谢谢如何在一个下拉菜单中获得所有的日子,月份和年份?

+1

仍然不知道什么ü需要做什么?这是在客户端还是服务器端? – Neal 2011-03-28 17:58:00

+0

我正在使用这个注册表单。你知道你有你的出生日期字段。所以我希望能够显示所有的日子,几个月,几年到现场的当前日期。 – AAA 2011-03-28 17:59:21

+1

由于每月的天数不同,PHP并不是您的最佳选择。当选择“月份”时,您必须提交表格才能获得正确的“日”计数。 – drudge 2011-03-28 18:10:49

如果你真的只是想在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(); 
?> 

而不是用三个不同的<select>,这不是一个非常用户友好的解决方案,为什么不使用一些基于Javascript的日历小部件?


例如,我听说过jQuery Datepicker好几次 - 效果要好得多,你不觉得:

        http://extern.pascal-martin.fr/so/5463037.png

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

+0

是的,我发现这个虽然使用谷歌搜索,但我想要一个下降的东西。这是出生日期,所以想象一下,如果你是在1943年出生的,你将不得不继续滚动回来... – AAA 2011-03-28 18:09:06

+1

我相信你只需要在文本字段中键入'1943',它就会调整到合适的年。 – drudge 2011-03-28 18:09:55

+0

@jnpcl它不..只是尝试。谢谢 – AAA 2011-03-28 18:13:53

主题是旧的,但在添加

接受的答案会说

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

- >

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

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

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

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

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

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