在iphone中查找两个date之间的总天数

我想find两个date之间的总天数。

例如今天是01-01-2011(DD-MM-YYYY),第二个date是(25-03-2011),我将如何find总天数?

NSDate *currentdate=[NSDate date]; NSLog(@"curretdate is ==%@",currentdate); NSDateFormatter *tempFormatter1 = [[[NSDateFormatter alloc]init]autorelease]; [tempFormatter1 setDateFormat:@"dd-mm-YYYY hh:mm:ss"]; NSDate *toDate = [tempFormatter1 dateFromString:@"20-04-2011 09:00:00"]; NSLog(@"toDate ==%@",toDate); 

在你的date格式中,你设置的错误是dd-MM-yyyy HH:mm:ss。 可能是那个问题..你得到错误的date,而不是得到答案我发送litte位代码得到天差。

  NSDateFormatter *tempFormatter = [[[NSDateFormatter alloc]init]autorelease]; [tempFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"]; NSDate *startdate = [tempFormatter dateFromString:@"15-01-2011 09:00:00"]; NSLog(@"startdate ==%@",startdate); NSDateFormatter *tempFormatter1 = [[[NSDateFormatter alloc]init]autorelease]; [tempFormatter1 setDateFormat:@"dd-MM-yyyy HH:mm:ss"]; NSDate *toDate = [tempFormatter1 dateFromString:@"20-01-2011 09:00:00"]; NSLog(@"toDate ==%@",toDate); int i = [startdate timeIntervalSince1970]; int j = [toDate timeIntervalSince1970]; double X = ji; int days=(int)((double)X/(3600.0*24.00)); NSLog(@"Total Days Between::%d",days); 

编辑1:

我们可以使用以下函数finddate差异:

 -(int)dateDiffrenceFromDate:(NSString *)date1 second:(NSString *)date2 { // Manage Date Formation same for both dates NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"dd-MM-yyyy"]; NSDate *startDate = [formatter dateFromString:date1]; NSDate *endDate = [formatter dateFromString:date2]; unsigned flags = NSDayCalendarUnit; NSDateComponents *difference = [[NSCalendar currentCalendar] components:flags fromDate:startDate toDate:endDate options:0]; int dayDiff = [difference day]; return dayDiff; } 

从Abizern的答案。 在这里find更多关于NSDateComponent的信息。

 NSCalendar *Calander = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; NSDateComponents *comps = [[NSDateComponents alloc] init]; [dateFormat setDateFormat:@"dd"]; [comps setDay:[[dateFormat stringFromDate:[NSDate date]] intValue]]; [dateFormat setDateFormat:@"MM"]; [comps setMonth:[[dateFormat stringFromDate:[NSDate date]] intValue]]; [dateFormat setDateFormat:@"yyyy"]; [comps setYear:[[dateFormat stringFromDate:[NSDate date]] intValue]]; [dateFormat setDateFormat:@"HH"]; [comps setHour:05]; [dateFormat setDateFormat:@"mm"]; [comps setMinute:30]; NSDate *currentDate=[Calander dateFromComponents:comps]; NSLog(@"Current Date is :- '%@'",currentDate); [dateFormat setDateFormat:@"dd"]; [comps setDay:[[dateFormat stringFromDate:yourDate] intValue]]; [dateFormat setDateFormat:@"MM"]; [comps setMonth:[[dateFormat stringFromDate:yourDate] intValue]]; [dateFormat setDateFormat:@"yyyy"]; [comps setYear:[[dateFormat stringFromDate:yourDate] intValue]]; [dateFormat setDateFormat:@"HH"]; [comps setHour:05]; [dateFormat setDateFormat:@"mm"]; [comps setMinute:30]; NSDate *reminderDate=[Calander dateFromComponents:comps]; //NSLog(@"Current Date is :- '%@'",reminderDate); //NSLog(@"Current Date is :- '%@'",currentDate); NSTimeInterval ti = [reminderDate timeIntervalSinceDate:currentDate]; //NSLog(@"Time Interval is :- '%f'",ti); int days = ti/86400; [dateFormat release]; [Calander release]; [comps release]; 

希望它会为你工作……..

更简单的方法是:

 // This just sets up the two dates you want to compare NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; [formatter setDateFormat:@"dd-MM-yyyy"]; NSDate *startDate = [formatter dateFromString:@"01-01-2011"]; NSDate *endDate = [formatter dateFromString:@"25-03-2011"]; // This performs the difference calculation unsigned flags = NSDayCalendarUnit; NSDateComponents *difference = [[NSCalendar currentCalendar] components:flags fromDate:startDate toDate:endDate options:0]; // This just logs your output NSLog(@"Start Date, %@", startDate); NSLog(@"End Date, %@", endDate); NSLog(@"%ld", [difference day]); 

结果是:

开始date,2011-01-01 00:00:00 +0000

结束date,2011-03-25 00:00:00 +0000

83

尝试使用和操纵秒来计算时差是一个坏主意。 Cocoa为Calendrical计算提供了大量的类和方法,您应尽可能多地使用它们。

尝试这个

 - (int) daysToDate:(NSDate*) endDate { //dates needed to be reset to represent only yyyy-mm-dd to get correct number of days between two days. NSDateFormatter *temp = [[NSDateFormatter alloc] init]; [temp setDateFormat:@"yyyy-MM-dd"]; NSDate *stDt = [temp dateFromString:[temp stringFromDate:self]]; NSDate *endDt = [temp dateFromString:[temp stringFromDate:endDate]]; [temp release]; unsigned int unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *comps = [gregorian components:unitFlags fromDate:stDt toDate:endDt options:0]; int days = [comps day]; [gregorian release]; return days; } 

//尝试一下

 if((![txtFromDate.text isEqualToString:@""]) && (![txtToDate.text isEqualToString:@""])) { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"MM/dd/yyyy"]; NSDate *startDate = [formatter dateFromString:txtFromDate.text]; NSDate *endDate = [formatter dateFromString:txtToDate.text]; unsigned flags = NSDayCalendarUnit; NSDateComponents *difference = [[NSCalendar currentCalendar] components:flags fromDate:startDate toDate:endDate options:0]; int dayDiff = [difference day]; lblNoOfDays.text =[NSString stringWithFormat:@"%d",dayDiff]; } 

查找开始date到结束date之间的date数。

  NSCalendar *cale=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; unsigned unitFlags=NSMonthCalendarUnit| NSDayCalendarUnit; NSDateComponents *comp1=[cale components:unitFlags fromDate:startDate toDate:endDate options:0]; NSInteger days=[comp1 day]; NSLog(@"Days %ld",(long)days); 
 NSDate *dateA; NSDate *dateB; NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:dateA toDate:dateB options:0]; NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year); 
 //write this code in .h file { NSDate *startDate,*EndDate; NSDateFormatter *Date_Formatter; } //write this code in .h file`enter code here` - (void)viewDidLoad { [super viewDidLoad]; Date_Formatter =[[NSDateFormatter alloc]init]; [Date_Formatter setDateFormat:@"dd-MM-yyyy"]; UIToolbar *numbertoolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; numbertoolbar.barStyle = UIBarStyleBlackTranslucent; numbertoolbar.items = [NSArray arrayWithObjects:[[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],nil]; [numbertoolbar sizeToFit]; Txt_Start_Date.inputAccessoryView = numbertoolbar; [Txt_Start_Date setInputView:Picker_Date]; Txt_End_Date.inputAccessoryView = numbertoolbar; [Txt_End_Date setInputView:Picker_Date]; [Picker_Date addTarget:self action:@selector(updateTextfield:) forControlEvents:UIControlEventValueChanged]; // Do any additional setup after loading the view, typically from a nib. } -(void)doneWithNumberPad { if ([Txt_Start_Date isFirstResponder]) { [Txt_Start_Date resignFirstResponder]; [Txt_End_Date becomeFirstResponder]; } else if([Txt_End_Date isFirstResponder]) { [Txt_End_Date resignFirstResponder]; startDate =[Date_Formatter dateFromString:Txt_Start_Date.text]; EndDate =[Date_Formatter dateFromString:Txt_End_Date.text]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [calendar components:NSDayCalendarUnit fromDate:startDate toDate:EndDate options:0]; Lab_Total_Days.text =[NSString stringWithFormat:@"%ld",components.day]; } } 

请试试这个。 希望它可以帮助你…

 NSDateFormatter *df=[[NSDateFormatter alloc] init]; // Set the date format according to your needs [df setDateFormat:@"MM/dd/YYYY hh:mm a"]; //for 12 hour format //[df setDateFormat:@"MM/dd/YYYY HH:mm "] // for 24 hour format NSDate *date1 = [df dateFromString:firstDateString]; NSDate *date2 = [df dateFromString:secondDatestring]; NSLog(@"%@f is the time difference",[date2 timeIntervalSinceDate:date1]); [df release];