13年前的日期Grails验证从今天开始

时间:2014-01-14 22:17:52

标签: grails groovy

我正在尝试将dateOfBirth注册为至少13岁。我不希望在我的User类上有age字段,我只想坚持使用dateOfBirth

如何将验证包括在13年中,减去闰年。

目前在我的约束中我正在使用这一行:

dateOfBirth blank: false, max: (new Date() - 13*365)

我不想使用自定义验证,因为我相信必须有一种没有它的方法。我尝试了以下内容:

dateOfBirth blank: false, use(TimeCategory) { max: new Date() - 13.year }

  • 由于use(TimeCategory)部分(我相信)
  • ,这不起作用

我也试过使用魔术数字插件无济于事。我试过了:

dateOfBirth blank: false, max: 13.years.ago

dateOfBirth blank: false, max: 13.years.ago.toDate()

并导入com.metasieve.magicnumbers.*包。

2 个答案:

答案 0 :(得分:2)

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

import groovy.time.TimeCategory    

dateOfBirth validator: {
    use (TimeCategory) {
        it?.before(13.years.ago) 
    }
}

答案 1 :(得分:0)

你的第一次尝试(虽然不精确)这一事实让我相信这会起作用:

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

虽然我会检查这实际上并没有编译到单个日期,但每次检查约束时都会重新计算。