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