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

Sequelize用户模型birthday字段验证:限制非未来日期且年龄≤120岁

Sequelize用户模型生日字段验证实现方案

直接修改你的birthday字段配置,添加自定义验证函数即可实现要求的两个规则:

email: {
  type: DataTypes.STRING(50),
  allowNull: false,
  validate: {
    isEmail: true,
    notEmpty: true
  }
},
birthday: {
  type: DataTypes.DATE, // DATE类型无需指定长度参数
  allowNull: false,
  // defaultValue: false, 此处设为false不合法,DATE类型需设置合法日期或移除(因allowNull为false,创建时必须传值)
  validate: {
    isDate: true,
    notEmpty: true,
    // 验证生日不能是未来日期
    isNotFuture(value) {
      const today = new Date();
      // 移除时分秒,仅对比日期部分
      const birthdayDate = new Date(value);
      birthdayDate.setHours(0, 0, 0, 0);
      today.setHours(0, 0, 0, 0);
      if (birthdayDate > today) {
        throw new Error('生日不能是未来日期');
      }
    },
    // 验证年龄不超过120岁
    maxAge120(value) {
      const birthdayDate = new Date(value);
      const maxBirthDate = new Date();
      maxBirthDate.setFullYear(maxBirthDate.getFullYear() - 120);
      // 移除时分秒,仅对比日期部分
      birthdayDate.setHours(0, 0, 0, 0);
      maxBirthDate.setHours(0, 0, 0, 0);
      if (birthdayDate < maxBirthDate) {
        throw new Error('年龄不能超过120岁');
      }
    }
  }
}

验证逻辑说明

  • 禁止未来日期:将传入的生日日期与当前日期(去除时分秒,避免同一天内的时间差干扰)对比,若生日晚于今日则抛出错误。
  • 年龄不超120岁:计算出120年前的日期,对比生日是否早于该日期,若是则抛出错误,确保用户年龄不超过120岁。

另外注意:原代码中DATE(50)的长度参数是多余的,Sequelize的DATE类型无需指定长度;defaultValue: false不符合DATE类型的存储要求,若allowNull: false,则创建用户时必须传入合法的生日日期,或者将defaultValue设置为一个合法的默认日期(比如new Date('1900-01-01'))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:14:56