作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的数据库中,我有两列,即 startDate 和 endDate,如果用户在 UI 中按下任何日期(例如 2015 年 7 月 16 日),那么它应该获取 startDate 和 endDate 之间的所有事件。
之前我写了一个用于获取凝视事件的谓词:
[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ >= %%@ AND %@ < %%@", @"startTime", @"endTime"], date, [date dateForNextDay]]
但是如果给定日期不是事件的开始日期,上述查询将不起作用。
例子: 如果我的 session 日期为 7/13 - 7/16 并且给定日期为 7/14,则 session 事件应该能够使用谓词获取。我的旧查询仅适用于 7 月 13 日。它应该在给定日期获取该事件 - 7/13、7/14、7/15、7/16
最佳答案
获取给定日期大于或等于给定日期且小于或等于给定日期的事件...
[NSPredicate predicateWithFormat:@"%@ >= startTime AND %@ <= endTime", date, date]
编辑...使用一个简单的对象进行测试,确认其工作正常...
- (NSArray *)filterArray:(NSArray *)array forDate:(NSDate *)date {
NSPredicate *p = [NSPredicate predicateWithFormat:@"%@ >= startTime AND %@ <= endTime", date, date];
return [array filteredArrayUsingPredicate:p];
}
- (void)testPredicate {
NSDictionary *event0 = @{ @"startTime":[self dateFromString:@"07/01/2015"], @"endTime":[self dateFromString:@"07/04/2015"] };
NSDictionary *event1 = @{ @"startTime":[self dateFromString:@"07/10/2015"], @"endTime":[self dateFromString:@"07/14/2015"] };
NSDictionary *event2 = @{ @"startTime":[self dateFromString:@"08/02/2015"], @"endTime":[self dateFromString:@"08/09/2015"] };
NSArray *events = @[event0, event1, event2];
NSDate *july9 = [self dateFromString:@"07/09/2015"];
NSDate *july10 = [self dateFromString:@"07/10/2015"];
NSDate *july11 = [self dateFromString:@"07/11/2015"];
NSDate *july13 = [self dateFromString:@"07/13/2015"];
NSDate *july14 = [self dateFromString:@"07/14/2015"];
NSDate *july15 = [self dateFromString:@"07/15/2015"];
NSLog(@"filtered using 9 should be empty %@", [self filterArray:events forDate:july9]);
NSLog(@"filtered using 10 should hit %@", [self filterArray:events forDate:july10]);
NSLog(@"filtered using 11 should hit %@", [self filterArray:events forDate:july11]);
NSLog(@"filtered using 13 should hit %@", [self filterArray:events forDate:july13]);
NSLog(@"filtered using 14 should hit %@", [self filterArray:events forDate:july14]);
NSLog(@"filtered using 15 should be empty %@", [self filterArray:events forDate:july15]);
}
- (NSDate *)dateFromString:(NSString *)string {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];
return [dateFormatter dateFromString:string];
}
前述内容不需要对午夜情况进行特殊处理即可按照问题建议执行(包括最后一个结束时间)。
这会生成以下日志输出,您可以自己确认...
filtered using 9 should be empty ()
filtered using 10 should hit (
{
endTime = "2015-07-14 07:00:00 +0000";
startTime = "2015-07-10 07:00:00 +0000";
}
)
filtered using 11 should hit (
{
endTime = "2015-07-14 07:00:00 +0000";
startTime = "2015-07-10 07:00:00 +0000";
}
)
filtered using 13 should hit (
{
endTime = "2015-07-14 07:00:00 +0000";
startTime = "2015-07-10 07:00:00 +0000";
}
)
filtered using 14 should hit (
{
endTime = "2015-07-14 07:00:00 +0000";
startTime = "2015-07-10 07:00:00 +0000";
}
)
filtered using 15 should be empty ()
关于ios - NSPredicate 用于多天全天事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31456213/
我想要一些如何打印消息,例如:“从那时起,已经过去了 x 天、y 小时、z 分钟和 w 秒”。目前我正在做这样的事情,但我想念剩下的部分(最重要的是)我不喜欢它。应该有更美的东西 dt = (date
有一个令人费解的要求。 基本上我需要根据这些条件创建唯一的 id 9 位数字,当天唯一(表示如果第二天再次出现该号码也没关系) 实时生成;仅限 java(意味着没有从数据库生成序列号 - 实际上根本没
我是一名优秀的程序员,十分优秀!