Comparing an NSDate to [NSDate date]

skylerl picture skylerl · Feb 13, 2010 · Viewed 26.1k times · Source

I am trying to force a user to select a date in the future with a date picker. I obviously used the compare: method, however, when I do the following code, even if it's the same date as [NSDate date], it tells the executes the if statement. Here is my code:

    if ([datePicker.date compare:[NSDate date]] == NSOrderedAscending) // If the picked date is earlier than today
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hmm, this date is earlier than today" 
                                                    message:@"The date you've selected is earlier than today's date, please pick another" 
                                                   delegate:nil  
                                          cancelButtonTitle:@"Okay, I'll pick another" 
                                          otherButtonTitles:nil];
    // Show the alert
    [alert show];

    // Release the alert
    [alert release];
}

Answer

Jesse Beder picture Jesse Beder · Feb 13, 2010

You can use

[datePicker.date timeIntervalSinceNow]

which returns an NSTimeInterval (just a typedef for a double, in units of seconds) which is positive for the future and negative for the past.

As the doc says, compare provides subsecond comparison, so you can use this to force their date to be a full day later (instead of just sometime in the future).