如何在 Scala Play Framework 中的表单上比较 date/time?
How to compare date/time on a form within the Scala Play Framework?
我正在为 Scala 表单中的日期选项添加验证;有一些可选的日期字段允许用户在特定的 date/time 范围内进行搜索,但第二个日期必须在第一个日期之后才能获得有效范围。
目前此验证有效:
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
。
有没有办法添加时间验证?我应该使用不同的验证方法吗?
只要您从表单中获取时间部分,日期调用 .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)
}
我正在为 Scala 表单中的日期选项添加验证;有一些可选的日期字段允许用户在特定的 date/time 范围内进行搜索,但第二个日期必须在第一个日期之后才能获得有效范围。
目前此验证有效:
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
。
有没有办法添加时间验证?我应该使用不同的验证方法吗?
只要您从表单中获取时间部分,日期调用 .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)
}