如何在下拉列表中获取所有日期,月份和年份?

时间:2011-03-28 17:56:42

标签: php calendar

是否有类或php脚本将在所有日期,月份和年份的下拉字段中回显。我需要将它们用于出生日期。我用Google搜索,但没有提出我可以实施或学习的内容。有任何想法吗?感谢

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:5)

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


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

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

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

答案 2 :(得分:2)

主题已经过时,但会在接受的答案中说明

  

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

- &GT;

  

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

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

答案 3 :(得分: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