我需要一种方法来在grails中找到它们:
1)我有两个约会start
和end
。
2)用户在浏览器中选择两个日期,说明userStartDate
和userEndDate
。
我拥有所有这些值,但我需要编写一个查询,确实发现start
和end
都在userStartDate
和userEndDate
之间。
例如,3月2日和3月3日是3月1日到3月4日之间。鉴于:
3月2日和3月3日分别为userStartDate
和userEndDate
日期
3月1日和3月4日分别是start
和end
。 (它们是域对象)。
我的代码适用于 之间的情况,即 根据我的问题,如何将该部分附加到我的代码中? 提前致谢。 start
位于 userStartDate
和userEndDate
之间的,如下所示:< / p>
test = Holiday.createCriteria().list {
and {
user {
eq('username',username)
}
or {
between('start',userStartDate,userEndDate)
between('end',userStartDate,userEndDate)
}
}
}
答案 0 :(得分:2)
日期提供方法之前和之后(http://docs.oracle.com/javase/6/docs/api/)
if(start.after(userStartDate) && start.before(userEndDate))
{
//start is between userStartDate && userEndDate
}
答案 1 :(得分:2)
确定一个日期是否介于两个其他日期之间的最简单方法是使用Range对象
def start = new Date()
def end = new Date() + 10
// make a date range
def dateRange = start..end
// test if some dates are within the range
def inRange = new Date() + 5
def outsideRange = new Date() + 50
assert inRange in dateRange
assert !(outsideRange in dateRange)
但是,您提到要比较查询中的日期,因此Groovy解决方案可能不是最佳解决方案。以下是使用条件查询检查某人的生日是否在两个日期之间的示例
def start = new Date()
def end = new Date() + 10
def results = User.withCriteria {
between('birthday', start, end)
}
答案 2 :(得分:2)
假设您已经检查userStartDate
在userEndDate
之前(在用户选择时验证)并且start
在数据库中end
之前(在插入),条件查询应如下所示:
test = Holiday.createCriteria().list {
user { eq('username',username) }
lt('start', userStartDate)
gt('end', userEndDate)
}
这会检查start
是否小于(即之前)userStartDate
且end
大于({之后)userEndDate
。也不需要包含and
块,因为所有子句都是隐式的。