只是在grails中过滤

时间:2015-03-25 12:54:28

标签: grails gorm

我正在尝试在视图上创建一个过滤器,允许用户按时间范围过滤数据:

enter image description here

当用户选择此选项时,它会映射到包含两个日期对象的枚举类型TimeRange。这些日期对象仅包含相应的时间,分别称为lowerBoundupperBound。例如:

MIDNIGHT_TO_SIX(1, Date.parse("HH:mm:ss", "00:00:00"), Date.parse("HH:mm:ss", "06:00:00")

这会产生Date个对象。因为我没有指定日期部分,所以设置为纪元日期。当我在批评中使用这些过滤时:

and {
   or {
       eq('startDateTime', range.lowerBound)
       gt('startDateTime', range.lowerBound)
   }

   or {
       eq('startDateTime', range.upperBound)
       lt('startDateTime', range.upperBound)
   }
}

什么都没有退回!这显然是因为我的数据库中的所有日期都没有在上一次or闭合之前或等于纪元时间。

有没有办法告诉标准在比较期间仅使用时间部分,或者有没有办法让我lowerBoundupperBound不关心{{1 }}?

1 个答案:

答案 0 :(得分:1)

直接的方法是从00:00:00保存秒数(或毫秒),这样查找就像:

enum Range { 
  MIDNIGHT_TO_SIX( 1, 0, 6 * 60 * 60 ) //in seconds 
}

标准:

{
  between 'startInSec', range.lower, range.upper 
}