在iOS中添加一天到当前date

我看到这个post: iOS和发现明天 。

提供的代码是:

units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; NSDateComponents* comps = [[NSCalendar currentCalendar] components:units fromDate:[NSDate date]]; // Add one day comps.day = comps.day+1; // no worries: even if it is the end of the month it will wrap to the next month, see doc // Recompose a new date, without any time information (so this will be at midnight) NSDate* tomorrowMidnight = [[NSCalendar currentCalendar] dateFromComponents:comps]; 

问题:我需要在当前date添加一天,例如,2013年6月21日至2013年5月21日之间的差额为1个月,而不是0个月。

我正在使用的代码:

  NSDate *selectedDate = [picker2 date]; unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit; NSDateComponents *conversionInfo = [currCalendar components:unitFlags fromDate:selectedDate toDate:[NSDate date] options:0]; DLog(@"%i",conversionInfo.month); DLog(@"%i",conversionInfo.day); conversionInfo.day +=1; DLog(@"%i",conversionInfo.day); DLog(@"%i",conversionInfo.month); int months = [conversionInfo month]; 

但是,当我试图找出2013年6月21日和2013年5月21日之间的差异 – >仍然返回我0个月,而不是1个月。

需要一些帮助。

形成date组件,其中包含要添加到原始date的天数。 从当前的日历表格中将该组件添加到您的原始date。

 NSDateComponents *dateComponents = [NSDateComponents new]; dateComponents.day = 1; NSDate *newDate = [[NSCalendar currentCalendar]dateByAddingComponents:dateComponents toDate: selectedDate options:0]; 

这是我使用的方法:

 + (NSDate *)addDays:(NSInteger)days toDate:(NSDate *)originalDate { NSDateComponents *components= [[NSDateComponents alloc] init]; [components setDay:days]; NSCalendar *calendar = [NSCalendar currentCalendar]; return [calendar dateByAddingComponents:components toDate:originalDate options:0]; } 

有了它,您可以添加任意数量的天数。 它也适用于负数,所以你可以减去几天。

简单而直接的解决scheme:

 NSDate *currentDate = [NSDate date]; NSDate *nextDate = [currentDate dateByAddingTimeInterval:(24*3600)]; 

这对我来说工作得很好。

对于swift googlers:

 NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitDay, value: 1, toDate: date, options: nil)! 

首先,您正在将date而不是月份分配给NSDateComponent。 执行以下代码,findinDate和newDate之间的区别

 NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [calendar components:NSCalendarUnitMonth fromDate:inDate]; 

NSInteger monthFlag = 1; components.month = minuteFlag;

 // Retrieve date with increased days count NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:monthFlag options:0]; 

要添加任何数量的任何组件到date,例如:2天或2个月,1年,执行以下操作:

 Calendar.current.date(byAdding: DateComponents(month: -1), to: date)! //this create date with previous month for date. 

你可以用任何东西初始化DateComponents

 public init(calendar: Calendar? = default, timeZone: TimeZone? = default, era: Int? = default, year: Int? = default, month: Int? = default, day: Int? = default, hour: Int? = default, minute: Int? = default, second: Int? = default, nanosecond: Int? = default, weekday: Int? = default, weekdayOrdinal: Int? = default, quarter: Int? = default, weekOfMonth: Int? = default, weekOfYear: Int? = default, yearForWeekOfYear: Int? = default)