将日子添加到NSDate

我想添加date到一个date,我得到了许多代码,但没有人为我在下面显示是我的代码,请有人帮我解决这个问题

int daysToAdd=[[appDlegateObj.selectedSkuData objectForKey:@"Release Time"] intValue]; NSTimeInterval secondsForFollowOn=daysToAdd*24*60*60; NSString *dateStr=[contentDic objectForKey:@"Date"]; NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSDate *dateFromString=[[NSDate alloc]init]; dateFromString=[dateFormatter dateFromString:dateStr]; [dateFormatter release]; NSDate *date=[dateFromString dateByAddingTimeInterval:secondsForFollowOn]; 

 // Initialize stringified date presentation NSString *myStringDate = @"2011-11-17"; // How much day to add int addDaysCount = 30; // Creating and configuring date formatter instance NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; // Retrieve NSDate instance from stringified date presentation NSDate *dateFromString = [dateFormatter dateFromString:myStringDate]; // Create and initialize date component instance NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; [dateComponents setDay:addDaysCount]; // Retrieve date with increased days count NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:dateFromString options:0]; NSLog(@"Original date: %@", [dateFormatter stringFromDate:dateFromString]); NSLog(@"New date: %@", [dateFormatter stringFromDate:newDate]); // Clean up [dateComponents release], dateComponents = nil; [dateFormatter release], dateFormatter = nil; 

输出:

 Original date: 2011-11-17 New date: 2011-12-17 
  NSDate *now = [NSDate date]; int daysToAdd = 1; NSDate *newDate = [now dateByAddingTimeInterval:60*60*24*daysToAdd]; 

使用iOS 8和10.9,现在可以更容易地做到这一点。 您可以添加任何数量的任何日历单位的date。 我在NSDate上声明了一个非常小的类别方法,使其更快(因为我只需要在整个应用程序中添加几天)。 下面的代码。

 -(NSDate *)addDaysToDate:(NSNumber *)numOfDaysToAdd { NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:numOfDaysToAdd.integerValue toDate:self options:nil]; return newDate; } 

关键的事情:NSCalendarUnitDay是我曾经让它知道我想添加天。 您可以将其更改为其他枚举值,如月或年。

由于它是NSDate的一个类别,我将这个值添加到自我。 如果你不想声明一个类别,你只需要在方法参数中使用一个date,如:

 -(NSDate *)addDays:(NSNumber *)numOfDaysToAdd toDate:(NSDate *)originalDate { NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:numOfDaysToAdd.integerValue toDate:originalDate options:nil]; return newDate; } 

我使用一个NSNumber,但你可以很容易地使用一个NSInteger。

最后,在Swift中:

 func addDaysToDate(daysToAdd: Int, originalDate: NSDate) -> NSDate? { let newDate = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.DayCalendarUnit, value: daysToAdd, toDate: originalDate, options: nil) return newDate } 

如果你想摆脱NSDate? 并觉得解开一个可能的零(date添加可能会失败)的舒适,你可以只返回newDate! 并摆脱? 标记。

 NSDateComponents *offsetComponents = [[NSDateComponents alloc] autorelease]; [offsetComponents setDay:1]; newDate = [[[CalendarContainer sharedCalendarContainer] gregorian] dateByAddingComponents:offsetComponents toDate:currentlyDisplayedDate options:0]; 

您可以通过添加时间间隔来为NSDate添加date

 NSDate* newDate = [date dateWithTimeInterval:3600*24*numberOfDays sinceDate:otherDate]; 

虽然如果你想真的准确的,并考虑闰秒,日光节约时间和所有这些你可能想要使用NSDateComponents date和时间编程指南和Omtara的链接中所述 。

我build议你阅读这篇文章,以获得更清洁的解决scheme

在Swift 2.1.X和xcode 7.1 OSX 10.10.5中,可以使用函数向前和向后添加任意天数

 func addDaystoGivenDate(baseDate:NSDate,NumberOfDaysToAdd:Int)->NSDate { let dateComponents = NSDateComponents() let CurrentCalendar = NSCalendar.currentCalendar() let CalendarOption = NSCalendarOptions() dateComponents.day = NumberOfDaysToAdd let newDate = CurrentCalendar.dateByAddingComponents(dateComponents, toDate: baseDate, options: CalendarOption) return newDate! } 

函数调用将当前date递增9天

 var newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: 9) print(newDate) 

函数调用当前date减less80天

 newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: -80) print(newDate) 

在Swift 2中,使用extension来扩展NSDate:

 extension NSDate { func addDays(days:Int) -> NSDate{ let newDate = NSCalendar.currentCalendar().dateByAddingUnit( .Day, value: days, toDate: self, options: NSCalendarOptions(rawValue: 0)) return newDate! } } 
  NSDate *Date=[datePicker date]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"dd.MM.yy EEEE h:mm a"];