在两个日期之间查找对象

时间:2014-12-09 00:00:30

标签: ios objective-c cocoa parse-platform

好的,所以我有一个带有两个键(startsAt)和(endsAt)的解析数据库,基本上我想在这两个给定时间之间返回所有对象。但是,我将时间存储为字符串,而不是日期。我真的不想将它们更改为日期,因为这会迫使我在程序的许多其他部分重做代码。那么有可能做到以下

    NSDate *leftDate = leftClassRoomAfterDatePicker.date;
    NSDate *arrivedDate = arrivedBeforeDatePicker.date;


    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MM-dd hh:mm"];

    NSString *leftDateString = [dateFormat stringFromDate:leftDate];
    NSString *arrivedDateString = [dateFormat stringFromDate:arrivedDate];

    NSLog(leftDateString);
    NSLog(arrivedDateString);

    PFQuery *query = [PFQuery queryWithClassName:@"PassData"];
    [query whereKey:@"startTime" greaterThan:leftDate];
    [query whereKey:@"timeArrived" lessThan:arrivedDate];

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
       NSLog(@"Successfully retrieved %d objects.", objects.count);
    }];

当我运行此代码时,我收到以下错误

问题是字符串没有返回正确的值。在我的解析数据库中,我的值为startTime:Dec 08,18:28 和结束时间:12月08日,18:28

但它仍然不起作用(没有返回任何对象)。我认为这是因为greaterthan / lessthan函数不适用于这样的字符串。

3 个答案:

答案 0 :(得分:1)

  

错误:startTime包含字符串值但是有一个日期(代码:102,   版本:1.2.21)

错误清楚地表明您正在比较两个不同的对象,一个是字符串,第二个是日期。所以有两件事你可以将任何一个转换成日期或字符串。因此,为了以简单的方式实现相同的功能,您可以编写一个带有函数的类别,该函数将转换为日期或字符串,并使用该方法执行比较。

答案 1 :(得分:1)

您已将leftDatearrivedDate转换为leftDateStringarrivedDateString,但您仍在使用leftDatearrivedDate查询。我想你打算写:

PFQuery *query = [PFQuery queryWithClassName:@"PassData"];
[query whereKey:@"startTime" greaterThan:leftDateString];
[query whereKey:@"timeArrived" lessThan:arrivedDateString];

在这种情况下,您将不再收到错误,因为您要将字符串与字符串进行比较。

虽然我通常建议您使用NSDate个对象存储和排序日期,在这种情况下,您的格式与普通NSDate种类的月份,日期的重要性降序相同,小时,然后分钟,即“MM-dd hh:mm”,只要一年或几秒对您无关紧要,只要查询的时间格式与数据库时间格式匹配,此查询就应该有效{{1} }和greaterThan将按字母/数字比较字符串对象。

答案 2 :(得分:0)

我想要工作,你必须在数据库中有Date个字段,然后在iOS上将NSDate传递给whereKey: