DarthBinks911 DarthBinks911 - 1 month ago 5
Scala Question

How to compare date/time on a form within the Scala Play Framework?

I'm adding validation for date options in a Scala form; there are optional date fields that allow a user to search between a specific date/time range, but the second date needs to be after the first date for a valid range.

At the moment this validation works:

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))))


But it only compares the dates and ignores the time section
HH:mm:ss
.

Is there a way to add time validation too? Should I be using a different validation method?

Answer

As long as you get the time section from the form, the Date calling .before() would definitely check on the time portion, too.

Try:

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

Then:

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