You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

简化日期表单创建:自动选项、联动限制及数据库存储需求

日期选择表单优化方案

一、自动生成年月选项+动态天数限制

下面的代码会自动生成12个月份、1900至当前年份的选项,并且根据选中的月份和年份动态调整日期选项(包含闰年二月29天的判断),提交时格式和标准date picker一致,方便存入数据库:

<div>
  <form>
    <div class="date-select-group">
      <label for="month">Month:</label>
      <select id="month" name="month">
        <option value="">Select Month</option>
      </select>

      <label for="day">Day:</label>
      <select id="day" name="day">
        <option value="">Select Day</option>
      </select>

      <label for="year">Year:</label>
      <select id="year" name="year">
        <option value="">Select Year</option>
      </select>
    </div>
    <input type="submit" value="Submit">
  </form>
</div>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
  // 生成月份选项
  const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
  months.forEach((month, index) => {
    const value = (index + 1).toString().padStart(2, '0');
    $('#month').append(`<option value="${value}">${month}</option>`);
  });

  // 生成年份选项(1900到当前年)
  const currentYear = new Date().getFullYear();
  for (let year = currentYear; year >= 1900; year--) {
    $('#year').append(`<option value="${year}">${year}</option>`);
  }

  // 计算当月天数
  function getDaysInMonth(month, year) {
    // month是01-12,转成0-11的索引
    const monthIndex = parseInt(month) - 1;
    return new Date(year, monthIndex + 1, 0).getDate();
  }

  // 更新日期选项
  function updateDayOptions() {
    const month = $('#month').val();
    const year = $('#year').val();
    $('#day').empty().append('<option value="">Select Day</option>');
    
    if (!month || !year) return;
    
    const days = getDaysInMonth(month, year);
    for (let day = 1; day <= days; day++) {
      const value = day.toString().padStart(2, '0');
      $('#day').append(`<option value="${value}">${day}</option>`);
    }
  }

  // 监听月份和年份变化,更新日期
  $('#month, #year').change(updateDayOptions);

  // 表单提交处理
  $('form').submit(function(event) {
    event.preventDefault();
    const month = $('#month').val();
    const day = $('#day').val();
    const year = $('#year').val();
    
    if (!month || !day || !year) {
      alert('请选择完整的日期');
      return;
    }

    // 格式化为标准日期格式(YYYY-MM-DD),方便存入数据库
    const formattedDate = `${year}-${month}-${day}`;
    console.log("Selected birthday:", formattedDate);
    
    // 这里可以添加AJAX提交到数据库的逻辑
    // $.post('/submit-date', { date: formattedDate }, function(response) { ... });
  });
});
</script>

<style>
.date-select-group {
  display: flex;
  gap: 15px;
  align-items: center;
  margin-bottom: 10px;
}
.date-select-group label {
  margin-right: 5px;
}
.date-select-group select {
  padding: 4px;
}
</style>

关键说明:

  • 自动生成选项:通过JS循环生成月份和年份,无需手动添加
  • 动态天数调整:根据选中的月份和年份计算当月天数,包含闰年二月29天的判断
  • 数据库友好格式:提交时将日期转为YYYY-MM-DD的标准格式,和原生date picker的存储格式一致

二、横向Date Picker实现

如果你想要类似原生date picker的横向选择样式,有两种简单实现方式:

方式1:自定义选择器横向排列

上面的代码已经通过display:flex将三个选择器排成一行,直接使用即可。

方式2:原生date input横向样式

原生date input本身是横向的,你可以通过CSS自定义外观,无需手动处理年月选项,浏览器自动提供选择界面,且直接返回标准格式日期:

<div>
  <form>
    <label for="birthday">Birthday:</label>
    <input type="date" id="birthday" name="birthday">
    <input type="submit" value="Submit">
  </form>
</div>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
  $('form').submit(function(event) {
    event.preventDefault();
    const date = $('#birthday').val();
    console.log("Selected birthday:", date);
    // 直接提交到数据库即可,格式已经是YYYY-MM-DD
  });
});
</script>

<style>
input[type="date"] {
  padding: 4px;
  font-size: 14px;
  border: 1px solid #ccc;
  border-radius: 4px;
}
</style>

内容的提问来源于stack exchange,提问作者Scatterinc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:35:36