Grails验证日期为13年前的今天

Grails验证日期为13年前的今天,grails,groovy,Grails,Groovy,我正在尝试将登记簿上的出生日期设置为至少13岁。我不想在我的用户类上有一个age字段,我只想使用dateOfBirth 我如何包括验证,以减去整整13年,考虑闰年 目前,在我的约束中,我使用以下行: dateOfBirth blank:false,max:(新日期()-13*365) 我宁愿不使用自定义验证,因为我相信没有它肯定有办法。我尝试了以下方法: dateOfBirth blank:false,使用(TimeCategory){max:newdate()-13.year} 这不起作用,

我正在尝试将登记簿上的出生日期设置为至少13岁。我不想在我的用户类上有一个
age
字段,我只想使用
dateOfBirth

我如何包括验证,以减去整整13年,考虑闰年

目前,在我的约束中,我使用以下行:

dateOfBirth blank:false,max:(新日期()-13*365)

我宁愿不使用自定义验证,因为我相信没有它肯定有办法。我尝试了以下方法:

dateOfBirth blank:false,使用(TimeCategory){max:newdate()-13.year}

  • 这不起作用,因为
    使用(时间类别)
    部分(我相信)
我也尝试过使用魔法数字插件,但没有用。我试过:

dateOfBirth blank:false,最大值:13年前

dateOfBirth blank:false,最大值:13.years.ago.toDate()


并导入了
com.metasieve.magicnumbers.*
软件包。

您的第一次尝试成功(尽管不准确),这让我相信这会成功:

dateOfBirth blank: false, max: ((new Date()).toCalendar().add( -13, Calendar.YEAR )).getTime()

虽然我会检查它是否实际编译到单个日期,但每次检查约束时都会重新计算。

自定义验证器有什么问题?我相信这是一个很好的例子,定制验证器是正确的选择

import groovy.time.TimeCategory    

dateOfBirth validator: {
    use (TimeCategory) {
        it?.before(13.years.ago) 
    }
}
可能会有帮助