Php 如何在下拉列表中获得所有天、月和年?

Php 如何在下拉列表中获得所有天、月和年?,php,calendar,Php,Calendar,是否有一个类或php脚本将在所有日期、月份和年份的下拉字段中回显。我需要将它们用于出生日期字段。我在谷歌上搜索了一下,但没有找到我可以实现或学习的东西。有什么想法吗?谢谢与其使用三个不同的,这不是一个非常用户友好的解决方案,为什么不使用一些基于Javascript的日历小部件呢 例如,我已经听过好几次了--效果要好得多,你不觉得: (来源:) (这只是我链接到的页面上演示的屏幕截图;有几个选项可以调整)与其使用三个不同的,这不是一个非常用户友好的解决方案,为什么不使用一些基于Javascri

是否有一个类或php脚本将在所有日期、月份和年份的下拉字段中回显。我需要将它们用于出生日期字段。我在谷歌上搜索了一下,但没有找到我可以实现或学习的东西。有什么想法吗?谢谢

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


例如,我已经听过好几次了--效果要好得多,你不觉得:


(来源:)


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

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


例如,我已经听过好几次了--效果要好得多,你不觉得:


(来源:)


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

如果您真的只想在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中完成,那么这里有一个简单的开始:

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


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


主题很旧,但会在接受的答案中添加

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

-->

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


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

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

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

-->

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


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

我知道这是一个老问题,但这可能会有所帮助

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


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

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



仍然不确定需要做什么?这是在客户端还是服务器端?我用它作为注册表。你知道你有你的出生日期字段。因此,我希望能够在字段中显示到当前日期为止的所有天、月、年。PHP不是您的最佳选择,因为每个月的天数不同。您必须在选择
时提交表单,以获得正确的
计数。好的,假设您允许120yo人注册,则下拉框中的行数为365*120=43800。完全疯了。最好将其拆分为单独的日/月/年字段,否则您将断开internet发送那么多
集。还有,别忘了leapyears,大约还有30个选项字段,总共44100个。@Marc B:我想你应该加的时候是在乘法。。)<代码>120+12+31。。我怀疑他会不会用:
2011-03-28
2011-03-27
2011-03-26
等等来做一个单一的
,仍然不确定你需要做什么?这是在客户端还是服务器端?我用它作为注册表。你知道你有你的出生日期字段。因此,我希望能够在字段中显示到当前日期为止的所有天、月、年。PHP不是您的最佳选择,因为每个月的天数不同。您必须在选择
时提交表单,以获得正确的
计数。好的,假设您允许120yo人注册,则下拉框中的行数为365*120=43800。完全疯了。最好将其拆分为单独的日/月/年字段,否则您将断开internet发送那么多
集。还有,别忘了leapyears,大约还有30个选项字段,总共44100个。@Marc B:我想你应该加的时候是在乘法。。)<代码>120+12+31。。我怀疑他会不会用:
2011-03-28
2011-03-27
2011-03-26
等等来制作一个
2011-03-26
等等。是的,我在谷歌搜索时发现了这一点,但我想要一个下拉列表。这是出生日期,所以想象一下,如果你出生在1943年,你必须不断地来回滚动……我相信你可以在文本字段中键入
1943
,它会调整到适当的年份。@AAA:我相信如果你将
altFormat
选项设置为
YYYY-MM-DD
,然后你就可以开始输入年份,并让它自动调整。如果它可以重复使用的话,这将是一个更好的选择。是的,我在谷歌搜索时发现了这个问题,但我想要一个下拉列表。这是出生日期,所以想象一下,如果你出生在1943年,你必须不断地来回滚动……我相信你可以在文本字段中键入
1943
,它会调整到适当的年份。@AAA:我相信如果你将
altFormat
选项设置为
YYYY-MM-DD
,然后你可以开始输入年份,并让它自动调整。如果它可以用于重复,这将是一个更好的选择。这个选项仍然有效,但对于插入mysql日期字段,你需要前导零。带:sprintf(“%02d”,$num);在FOR循环中,在回显$m和$d之前,这个循环仍然有效,但是对于insert-into-mysql-DATE字段,您需要前导的零。带:sprintf(“%02d”,$num);在响应$m和$d之前,在FOR循环中。