【问题标题】:Check if the given date time is between two others date time in Objective C检查给定的日期时间是否在Objective C中的其他两个日期时间之间
【发布时间】:2015-03-16 07:09:42
【问题描述】:

我试图找出检查我的日期时间是否在另外两个日期时间之间的方法,例如,我从服务器获取当前时间为“2015 年 3 月 16 日 14:17”,所以我想检查这是否日期时间是否介于“2015 年 2 月 4 日 08:00-09:00”等两个日期时间范围之间。

【问题讨论】:

  • 您是否在为日期格式解析或实际比较而苦恼?
  • 检查我的答案。其中,如果 isDateCheck 返回 YES,则返回两个日期之间的日期,否则返回两个日期之间的日期。

标签: ios objective-c datetime nsdate


【解决方案1】:

我会建议下面的类方法

+ (BOOL)checkDate:(NSDate*)dateToCheck startingDate:(NSDate*)startingDate endDate:(NSDate*)endDate
{
    BOOL returnValue;

    if ([startingDate compare:endDate]==NSOrderedDescending)
    {
        returnValue = [dateToCheck compare:endDate]==NSOrderedAscending && [dateToCheck compare:startingDate]==NSOrderedDescending;

    }
    else if ([startingDate compare:endDate]==NSOrderedAscending)
    {
        returnValue = [dateToCheck compare:startingDate]==NSOrderedAscending && [dateToCheck compare:endDate]==NSOrderedDescending;
    }
    else
    {
    returnValue = [dateToCheck compare:startingDate]==NSOrderedSame && [dateToCheck compare:endDate]==NSOrderedSame;
    }
    return returnValue;
}

【讨论】:

    【解决方案2】:

    当前日期:

    NSDate *currentDate = [NSDate date];
    
    NSLog(@"-- %@",currentDate);
    

    开始日期:

    // 开始日期 - 2015-03-12 00:00:58 +0000

    NSString *stringStartDate = @"2015-03-12 00:00:58";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
    NSDate *dateStart = [formatter dateFromString:stringStartDate];
    

    结束日期:

    // 结束日期 - 2015-03-20 00:00:58 +0000

    NSString *stringEndDate = @"2015-03-20 00:00:58";
    NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
    [formatter1 setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
    NSDate *dateEnd = [formatter1 dateFromString:stringEndDate];
    

    检查两个日期之间的日期的功能

    BOOL isDateCheck = [self isDate:currentDate inRangeFirstDate:dateStart lastDate:dateEnd];
    

    功能

    - (BOOL)isDate:(NSDate *)date inRangeFirstDate:(NSDate *)firstDate lastDate:(NSDate *)lastDate {
        return [date compare:firstDate] == NSOrderedDescending &&
        [date compare:lastDate]  == NSOrderedAscending;
    }
    

    【讨论】:

    • 感谢@Kirit Modi 的回答。
    【解决方案3】:

    如果您有三个 NSDate 实例,请尝试该代码:

    NSDate *beginDate, *endDate, *checkDate;
    if ([beginDate laterDate:checkDate] == checkDate &&
        [checkDate laterDate:endDate] == endDate) {
        //checkDate in between beginDate and endDate
    }
    

    对于日期解析,请使用以下内容:

    NSString *inputRange = @"Feb 4 2015 08:00-09:00";
    NSRange firstRange = NSMakeRange(0, inputRange.length - 6);
    NSString *firstDate = [inputRange substringWithRange:firstRange];
    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    dateFormatter.dateFormat = @"MMM dd yyyy HH:mm";
    NSDate *beginDate = [dateFormatter dateFromString:firstDate];
    NSString *secondDate = [inputRange substringWithRange:NSMakeRange(0, inputRange.length - 11)];
    secondDate = [secondDate stringByAppendingString:[inputRange substringWithRange:NSMakeRange(inputRange.length - 5, 5)]];
    NSDate *endDate = [dateFormatter dateFromString:secondDate];
    

    【讨论】:

    • 感谢您的宝贵时间,实际上我是这个逻辑的新手@Azat,我是否需要在比较之前进行日期格式解析?
    • 是的,您应该将字符串日期解析为 NSDate 对象。您是否具有以下格式的间隔,或者您是否有两个单独的日期字符串? Feb 4 2015 08:00-09:00
    • Okey.. 你能告诉我我的情况吗,我如何解析日期时间段“2015 年 2 月 4 日 08:00-09:00”?
    • @AnandGautam 我添加到我的答案解析代码中,但它高度取决于您的格式字符串
    • 谢谢@Azat,我正在我的应用程序中尝试你的代码,请给我一些时间。
    猜你喜欢
    • 2022-07-21
    • 2018-07-26
    • 2011-02-07
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多