目标C-计算两个date之间的天数

可能重复:
我怎样才能比较两个date,返回一个天数。

我有两个date(如“yyyy-mm-dd”forms的NSString),例如:

NSString *start = "2010-11-01"; NSString *end = "2010-12-01"; 

我想实现:

 - (int)numberOfDaysBetween:(NSString *)startDate and:(NSString *)endDate { } 

谢谢!

 NSString *start = @"2010-09-01"; NSString *end = @"2010-12-01"; NSDateFormatter *f = [[NSDateFormatter alloc] init]; [f setDateFormat:@"yyyy-MM-dd"]; NSDate *startDate = [f dateFromString:start]; NSDate *endDate = [f dateFromString:end]; NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0]; 

components现在保持不同。

 NSLog(@"%ld", [components day]); 

有一个完整的date和时间编程指南。 这里有一个相关的部分给你一个关于怎么做的提示。

这是示例代码来自另一个问题的地方。

尝试和写一些基于这个,然后回来,如果你有具体的问题。

编辑

好的。 这里是我将如何写它的最基本的forms的代码。

首先,我会扩展NSDate。

头文件:

 // NSDate+ADNExtensions.h #import <Cocoa/Cocoa.h> @interface NSDate (ADNExtensions) - (NSInteger)numberOfDaysUntil:(NSDate *)aDate; @end 

执行文件:

 // NSDate+ADNExtensions.m #import "NSDate+ADNExtensions.h" @implementation NSDate (ADNExtensions) - (NSInteger)numberOfDaysUntil:(NSDate *)aDate { NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit fromDate:self toDate:aDate options:0]; return [components day]; } @end 

这是非常粗糙的代码。 没有错误检查或validation第二个date晚于第一个。

然后我会像这样使用它(运行在64位垃圾收集环境中):

 NSDate *startDate = [NSDate dateWithString:@"2010-11-01 00:00:00 +0000"]; NSDate *endDate = [NSDate dateWithString:@"2010-11-02 00:00:00 +0000"]; NSInteger difference = [startDate numberOfDaysUntil:endDate]; NSLog(@"Diff = %ld", difference); 

这真是太遗憾了,因为通过发布你的代码和错误的输出结果并获得更多的具体帮助,你将会学到更多东西。 但是,如果你只是想成为一个剪贴式程序员, 把这个代码和祝你好运。

这个代码似乎在Swift 2中很好地工作:

 func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int { let calendar = NSCalendar.currentCalendar() let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: []) return components.day } 

ObjC代码:

 NSDateComponents *dateComponent = [calender components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0]; 

结果:

 int totalDays = (int)dateComponent.day; 

Swift 3:

 let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" let start = formatter.date(from: "2010-09-01")! let end = formatter.date(from: "2010-12-01")! let days = Calendar.current.dateComponents([.day], from: start, to: end).day! 

Swift 4的实现

方法调用:

 let numberOfDays = daysBetweenDates(startDate: fileCreatedDate,endDate: date) 

方法实施:

  func daysBetweenDates(startDate: Date, endDate: Date) -> Int { let daysBetween = Calendar.current.dateComponents([.day], from: startDate, to: endDate) print(daysBetween.day!) return daysBetween.day! } 

目标C的实施:

方法调用:

 int numberOfDaysSinceFileCreation = [self daysBetweenDates: fileCreatedDate currentDate: today]; 

方法实施:

 - (int) daysBetweenDates: (NSDate *)startDate currentDate: (NSDate *)endDate { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *dateComponent = [calendar components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0]; int totalDays = (int)dateComponent.day; return totalDays; }