iPhone: Issue comparing a date between current date and sixty days from current date

烈酒焚心 提交于 2019-12-12 03:16:10

问题


I need to check an event date, which should be between Current date and 60 days from now. The below code is used, but it is NOT working correctly. Please note, i'm getting event string like this - "2012-04-14T16:50:02Z" from my server.

    // current date
double currDateInMilliSecs = [NSDate timeIntervalSinceReferenceDate] * 1000;    
NSLog(@"currDateInMilliSecs: %f", currDateInMilliSecs);

// sixty days
double sixtydaysvalue = 60.0 * 24.0 * 3600.0 * 1000.0;
NSLog(@"sixtydaysvalue: %f", sixtydaysvalue);
// add current date + sixt days
double sixtyDaysMilliSecsFromCurrDate = currDateInMilliSecs + sixtydaysvalue;
NSLog(@"sixtyDaysMilliSecsFromCurrDate: %f", sixtyDaysMilliSecsFromCurrDate);

// check does the event date between current date + 60 days
NSDateFormatter *df = [[NSDateFormatter alloc] init];
//[df setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
//[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

// [eventDict objectForKey:@"begin_at"] gives date string like this "2012-04-14T16:50:02Z"  for ex.
NSDate *eventdate = [df dateFromString:[eventDict objectForKey:@"begin_at"]];

NSTimeInterval nowSinceEventDate = [eventdate timeIntervalSince1970];
NSLog(@"nowSinceEventDate: %f", nowSinceEventDate);
double eventDateInMilliSecs = nowSinceEventDate * 1000;
NSLog(@"eventDateInMilliSecs: %f", eventDateInMilliSecs);

// this is not working as expected    
if ( eventDateInMilliSecs<sixtyDaysMilliSecsFromCurrDate && eventDateInMilliSecs>currDateInMilliSecs )
{


}
else
{
}

回答1:


You're trying to solve this as if it were Java, which it's not. Instead, try using things from the Cocoa Touch frameworks. Since your calculations are rather simple, you can do them with dates, but more complex things can pretty easily be done using NSCalendar and NSDateComponents.

A simple solution to your problem (here we assume eventdate is the date you created using your formatter):

NSDate* now = [NSDate date];
NSDate* sixtyDaysFromNow = [now dateByAddingTimeInterval:(60 * 60 * 24 * 60)];
if( [eventDate earlierDate:now] == now && [eventDate laterDate:sixtyDaysFromNow] == sixtyDaysFromNow ) {
  // the event date is within scope
} else {
  // the event date is outside stop
}



回答2:


use my function for comparing date its working on my project

i hope its help you

-(BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endingDate

{

    if ([date compare:beginDate] == NSOrderedAscending)
        return NO;

    if ([date compare:endingDate] == NSOrderedDescending) 
        return NO;

    return YES;
}


来源:https://stackoverflow.com/questions/10228816/iphone-issue-comparing-a-date-between-current-date-and-sixty-days-from-current

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