2016-10-14 13 views
0

Scalaフォームの日付オプションの検証を追加しています。ユーザが特定の日付/時間範囲を検索することを可能にする任意の日付フィールドが存在するが、第2の日付は有効な範囲の最初の日付の後でなければならない。Scala Play Frameworkのフォームで日付/時刻を比較するには?

現時点では、この検証は動作します:

val searchForm = Form(
    mapping(
    "ItemID" -> optional(text), 
    "fromDate" -> optional(jodaLocalDate("yyyy-MM-dd:HH:mm:ss")), 
    "toDate" -> optional(jodaLocalDate("yyyy-MM-dd:HH:mm:ss")), 
    "Class" -> optional(text), 
    "Status" -> optional(text), 
    "Group" -> optional(text), 
    "Area" -> nonEmptyText, 
    "Ordered" -> optional(text) 
)(SearchModel.apply)(SearchModel.unapply) 
    verifying("Both or no dates must be selected. Date/Time range must be valid.", f => (f.fromDate.isEmpty && f.toDate.isEmpty)|| 
    ((f.fromDate.isDefined&&f.toDate.isDefined)&&f.fromDate.head.isBefore(f.toDate.head)))) 

をしかし、それは唯一の日付を比較して、時間区間HH:mm:ssを無視します。

タイムバリデーションも追加する方法はありますか?別の検証方法を使用すべきですか?

+0

あなたのHTMLフォームは間違いなく時間部分も送信しますか? –

答えて

1

フォームから時刻セクションを取得している場合は、.before()という日付のコールでも時間部分が確実にチェックされます。

試してみてください。そして、

def validateDates(fromDate: Option[Date], toDate: Option[Date]): Boolean = { 
    if(fromDate.isEmpty || toDate.isEmpty) false 
    else fromDate.get.before(toDate.get) 
} 

verifying("Both or no dates must be selected. Date/Time range must be valid.", f => validateDates(f.fromDate, f.toDate)) 

編集: ちょうど両方の日付フィールドが空の場合、これはそうvalidateDatesへのわずかな変更は、その修正だろう、合格しないと実現:

def validateDates(fromDate: Option[Date], toDate: Option[Date]): Boolean = { 
     if(fromDate.isEmpty && toDate.isEmpty) true 
     else if(fromDate.isEmpty || toDate.isEmpty) false 
     else fromDate.get.before(toDate.get) 
    } 
関連する問題