How to check whether now date is during 9:00-18:00

前端 未结 2 1757
感动是毒
感动是毒 2021-02-05 18:32

When my app is launched I want to check whether the date is between 9:00-18:00.

And I can get the time of now using NSDate. How can I check the time?

相关标签:
2条回答
  • Construct dates for 09:00 and 18:00 today and compare the current time with those dates:

    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *now = [NSDate date];
    NSDateComponents *components = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
    
    [components setHour:9];
    [components setMinute:0];
    [components setSecond:0];
    NSDate *nineHundred = [cal dateFromComponents:components];
    
    [components setHour:18];
    NSDate *eighteenHundred = [cal dateFromComponents:components];
    
    if ([nineHundred compare:now] != NSOrderedDescending &&
        [eighteenHundred compare:now] != NSOrderedAscending)
    {
        NSLog(@"Date is between 09:00 and 18:00");
    }
    
    0 讨论(0)
  • 2021-02-05 19:17

    So many answers and so many flaws...

    You can use NSDateFormatter in order to get an user-friendly string from a date. But it is a very bad idea to use that string for date comparisons!
    Please ignore any answer to your question that involves using strings...

    If you want to get information about a date's year, month, day, hour, minute, etc., you should use NSCalendar and NSDateComponents.

    In order to check whether a date is between 9:00 and 18:00 you can do the following:

    NSDate *date = [NSDate date];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date];
    
    if (dateComponents.hour >= 9 && dateComponents.hour < 18) {
        NSLog(@"Date is between 9:00 and 18:00.");
    }
    

    EDIT:
    Whoops, using dateComponents.hour <= 18 will result in wrong results for dates like 18:01. dateComponents.hour < 18 is the way to go. ;)

    0 讨论(0)
提交回复
热议问题