0

我正在创建一个注册,我需要在其中获取用户的出生日期,我的问题是,如何在 html 中创建月、年和日的下拉框,然后将这些天处理成一个 php 脚本来插入它到数据库?某月的月、年和日在哪里应该有有效天数?

4

2 回答 2

4

编辑: 现场演示

这个怎么样:

<select name="year"></select>
<select name="month">
    <option value="1">January</option>
    ...
</select>
<select name="day"></select>

和 JS 部分:

var ysel = document.getElementsByName("year")[0],
    msel = document.getElementsByName("month")[0],
    dsel = document.getElementsByName("day")[0];
for (var i = 2000; i >= 1950; i--) {
    var opt = new Option();
    opt.value = opt.text = i;
    ysel.add(opt);
}
ysel.addEventListener("change", validate_date);
msel.addEventListener("change", validate_date);

function validate_date() {
    var y = +ysel.value, m = msel.value, d = dsel.value;
    if (m === "2")
        var mlength = 28 + (!(y & 3) && ((y % 100)!==0 || !(y & 15)));
    else var mlength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m - 1];
    dsel.length = 0;
    for (var i = 1; i <= mlength; i++) {
        var opt = new Option();
        opt.value = opt.text = i;
        if (i == d) opt.selected = true;
        dsel.add(opt);
    }
}
validate_date();

我会让你处理 PHP 部分。

一些警告:

  1. 我用过addEventListener。请记住,IE<9attachEvent改为使用。您可以使用该onchange属性(已弃用)或依赖一些 JS 框架(如 jQuery)来完成这项工作:$(msel).change(validate_date);.
  2. 在旧版本的 Firefox 中,元素的add方法<select>是愚蠢的,需要第二个null参数。
  3. 当脚本计算mlength2 月时,它添加一个布尔值(一个简单的闰年检查),它被转换为 0 或 1,到 28。这在 ECMAScript 5 严格模式下引发和异常。
于 2012-06-23T11:06:03.987 回答
1

只需给他们一个纯文本输入。如果您不相信人们可以通过键入正确地输入生日,那么为什么使用选择元素会有任何不同呢?只需告诉他们您期望的格式即可。

例如

<script>
function validateDate(v) {
  var bits = v.split('/');
  var d = new Date(bits[2], --bits[1], bits[0]);
  return d.getFullYear() == bits[2] && d.getMonth() == bits[1];
}

function validateForm(form) {
  if (!validateDate(form.birthday.value)) {
    alert('Birthday date is not a valid date');
    return false;
  }
}
</script>

<form onsubmit="return validateForm(this);" action="">
  <div>Birthday (day/month/year): <input type="text" name="birthday"> 
    <input type="submit">
  </div>
</form>

您可以包含一个脚本版本,将普通输入替换为选择,但要涵盖合理的时间段,您将在年份选择中拥有大约 100 个条目,然后您需要等到他们同时选择年份和月份才能输入在那些日子里。至少上面为您提供了一个简单的算法来验证日期。

于 2012-06-23T12:54:51.267 回答