Check whether time falls between two time iOS

可紊 提交于 2019-11-28 13:05:39
  • create date components for opening and closing time.
  • create date components with hour, minute, second from date to check
  • place opening, closing and current time in an array
  • sort array. if current time is at index 1, it lies between opening and closing time

NSDateComponents *openingTime = [[NSDateComponents alloc] init];
openingTime.hour = 8;
openingTime.minute = 40;

NSDateComponents *closingTime = [[NSDateComponents alloc] init];
closingTime.hour = 16;
closingTime.minute = 0;

NSDate *now = [NSDate date];

NSDateComponents *currentTime = [[NSCalendar currentCalendar] components:NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond
                                                                fromDate:now];

NSMutableArray *times = [@[openingTime, closingTime, currentTime] mutableCopy];
[times sortUsingComparator:^NSComparisonResult(NSDateComponents *t1, NSDateComponents *t2) {
    if (t1.hour > t2.hour) {
        return NSOrderedDescending;
    }

    if (t1.hour < t2.hour) {
        return NSOrderedAscending;
    }
    // hour is the same
    if (t1.minute > t2.minute) {
        return NSOrderedDescending;
    }

    if (t1.minute < t2.minute) {
        return NSOrderedAscending;
    }
    // hour and minute are the same
    if (t1.second > t2.second) {
        return NSOrderedDescending;
    }

    if (t1.second < t2.second) {
        return NSOrderedAscending;
    }
    return NSOrderedSame;

}];

if ([times indexOfObject:currentTime] == 1) {
    NSLog(@"We are Open!");
} else {
    NSLog(@"Sorry, we are closed!");
}

Try this -

NSString *startTimeString = @"08:00 AM";
NSString *endTimeString = @"06:00 PM";

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"hh:mm a"];

NSString *nowTimeString = [formatter stringFromDate:[NSDate date]];

int startTime   = [self minutesSinceMidnight:[formatter dateFromString:startTimeString]];
int endTime  = [self minutesSinceMidnight:[formatter dateFromString:endTimeString]];
int nowTime     = [self minutesSinceMidnight:[formatter dateFromString:nowTimeString]];;


if (startTime <= nowTime && nowTime <= endTime)
{
    NSLog(@"Time is between");
}
else {
    NSLog(@"Time is not between");
}


-(int) minutesSinceMidnight:(NSDate *)date
{
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:date];
    return 60 * (int)[components hour] + (int)[components minute];        
}

Check the screenshot -

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!