2014-01-14 86 views
0

我試圖將dateOfBirth設置爲至少13歲。我不想在我的用戶類中有age字段,我只想堅持dateOfBirthGrails驗證日期從今天起13年前

我如何包括驗證減去精確的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.*包。

+1

http://stackoverflow.com/questions/4081169/grails-min-constraint-for-date-validation可能有助於 –

回答

0

,你的第一次嘗試的作品(雖然不精確)使我相信這會工作的事實:

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

雖然我會檢查,這是不實際編譯爲一個日期,但重新計算每次檢查約束。

2

自定義驗證器有什麼問題?我相信這是一個很好的例子,一個自定義驗證器是正確的選擇。

import groovy.time.TimeCategory  

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