查找iphone中两个日期之间的总天数

KET*_*TAN 8 nsdate nsdateformatter ios

我想找到两个日期之间的总天数.

例如今天是01-01-2011(DD-MM-YYYY),第二个日期是(25-03-2011),我如何找到总天数?

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);
Run Code Online (Sandbox Code Playgroud)

AJP*_*tel 10

在你的日期格式你设置错误它是dd-MM-yyyy HH:mm:ss.可能是那个问题..你得到错误的日期而没有得到答案我发送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 = j-i;

   int days=(int)((double)X/(3600.0*24.00));
   NSLog(@"Total Days Between::%d",days);
Run Code Online (Sandbox Code Playgroud)

编辑1:

我们可以使用以下功能找到日期差异:

-(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;
}
Run Code Online (Sandbox Code Playgroud)

来自Abizern的ans.在这里找到更多NSDateComponent的信息.

  • 请注意,这不需要花费数小时的时间.例如,如果差异是例如1.6天,则可能返回1天而不是2天,并且在特殊情况下可能更糟糕的是在两个日期之间存在DST切换.首选使用NSDateComponents检索日期,月份,年份等日期组件. (3认同)

SJS*_*SJS 6

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];
Run Code Online (Sandbox Code Playgroud)

希望它对你有用........


Abi*_*ern 5

一种更简单的方法是:

// 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]);
Run Code Online (Sandbox Code Playgroud)

结果是:

开始日期,2011-01-01 00:00:00 +0000

结束日期,2011-03-25 00:00:00 +0000

83

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