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

如何限制年份选择器仅显示距今60年前及更早年份?

限制年份选择范围为距今60年前的实现方案

核心思路

先计算允许选择的最大年份(当前年份减去60),生成该年份及更早的年份选项列表替换原有模拟数据;同时配合Formik表单验证,双重确保输入符合要求。

步骤1:生成合规的年份选项数组

编写工具函数动态生成年份范围,替代原有的selectYear模拟数据:

// 计算允许的最大年份:当前年份 - 60
const getValidYearOptions = () => {
  const currentYear = new Date().getFullYear();
  const maxAllowedYear = currentYear - 60;
  const yearOptions = [];
  
  // 生成从maxAllowedYear往前推100年的选项(可按需调整下限)
  for (let year = maxAllowedYear; year >= maxAllowedYear - 100; year--) {
    yearOptions.push({
      label: year.toString(),
      value: year.toString()
    });
  }
  return yearOptions;
};

// 在组件中调用生成合规选项
const validYearOptions = getValidYearOptions();

步骤2:替换Select组件的menuItems

将原代码中的menuItems={selectYear}替换为生成的合规选项:

<Select
  label="Start Year"
  menuItems={validYearOptions} // 替换为合规年份数组
  name={`educations[${index}].startYear`}
  value={formik.values.educations[index].startYear}
  handleChange={formik.handleChange}
  color="secondary"
  error={formik.errors.startYear}
/>
<FormHelperText error>{formik.errors.startYear}</FormHelperText>

<Select
  label="End Year"
  menuItems={validYearOptions} // 替换为合规年份数组
  name={`educations[${index}].endYear`}
  value={formik.values.educations[index].endYear}
  handleChange={formik.handleChange}
  color="secondary"
  error={formik.errors.endYear}
/>
<FormHelperText error>{formik.errors.endYear}</FormHelperText>

步骤3:添加Formik表单验证(可选但推荐)

防止非常规手段输入超出范围的年份,在Formik验证规则中添加年份校验:

const validationSchema = Yup.object().shape({
  educations: Yup.array().of(
    Yup.object().shape({
      startYear: Yup.string()
        .required("起始年份不能为空")
        .test(
          "max-year",
          `起始年份不能晚于${new Date().getFullYear() - 60}年`,
          (value) => {
            if (!value) return true;
            const maxYear = new Date().getFullYear() - 60;
            return parseInt(value) <= maxYear;
          }
        ),
      endYear: Yup.string()
        .required("结束年份不能为空")
        .test(
          "max-year",
          `结束年份不能晚于${new Date().getFullYear() - 60}年`,
          (value) => {
            if (!value) return true;
            const maxYear = new Date().getFullYear() - 60;
            return parseInt(value) <= maxYear;
          }
        )
    })
  )
});

补充说明

  • 动态生成的年份数组会自动适配当前年份,无需手动更新模拟数据
  • 若需调整年份下限(允许更早的年份),修改for循环的终止条件即可
  • 表单验证可作为兜底,确保输入完全符合规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:05:38