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

ios, nsdate, objective-c

Solution

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. ;)

Problem

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?

Original source

Related problems