Con iOS 8 y 10.9, ahora puede realmente hacer esto mucho más fácil. Puede agregar cualquier número de cualquier unidad de calendario a una fecha. Decidí un método de categoría realmente pequeño en NSDate para hacer esto aún más rápido (ya que solo necesitaba agregar días en toda mi aplicación). Código a continuación.
-(NSDate *)addDaysToDate:(NSNumber *)numOfDaysToAdd {
NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:numOfDaysToAdd.integerValue toDate:self options:nil];
return newDate;
}
cosas claves: NSCalendarUnitDay es lo que solía hacerle saber Quiero añadir días. Puede cambiar esto a los otros valores enum, como meses o años.
Dado que es una categoría en NSDate, estoy agregando el valor a sí mismo. Si no desea declarar una categoría, que le acaba de tomar una fecha en los parámetros del método, como:
-(NSDate *)addDays:(NSNumber *)numOfDaysToAdd toDate:(NSDate *)originalDate {
NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:numOfDaysToAdd.integerValue toDate:originalDate options:nil];
return newDate;
}
utilizo un NSNumber, pero se puede utilizar fácilmente con sólo un NSInteger.
Por último, en Swift:
func addDaysToDate(daysToAdd: Int, originalDate: NSDate) -> NSDate? {
let newDate = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.DayCalendarUnit, value: daysToAdd, toDate: originalDate, options: nil)
return newDate
}
Si desea deshacerse de la NSDate? y se sienta cómodo con desenvolver un posible nulo (la fecha de sumar puede fallar), ¡simplemente puede devolver newDate! y deshacerse de la? marca.
Gracias claro de luna, su código está funcionando bien. – karthick
@moonlight: ¿qué pasa con dateByRemovingComponents ?? ¿Qué debo hacer si necesito obtener una nueva fecha 1 mes anterior a la fecha actual? –
@BishalGhimire setMonth a -1 (para 'dateComponents') o cualquier número que desee restar. –