2011-11-17 12 views
9

Quiero agregar días a una fecha, tengo muchos códigos para esto, pero ninguno de ellos están trabajando para mí continuación se muestra es mi código, por favor, que alguien me ayude a solucionar este problemadías Agregando NSDate

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]; 

Respuesta

28
// 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; 

Salida:

Original date: 2011-11-17 
New date: 2011-12-17 
+0

Gracias claro de luna, su código está funcionando bien. – karthick

+0

@moonlight: ¿qué pasa con dateByRemovingComponents ?? ¿Qué debo hacer si necesito obtener una nueva fecha 1 mes anterior a la fecha actual? –

+2

@BishalGhimire setMonth a -1 (para 'dateComponents') o cualquier número que desee restar. –

3

puede agregar días a una NSDate mediante la adición de un intervalo de tiempo

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

Aunque si quieres ser muy precisa al respecto, y tener en segundos bisiestos, tiempos de ahorro de luz del día y todo este tipo de cosas es posible que desee para usar NSDateComponents como se describe en Date and Time Programming Guide y Omtara's link.

2

Le sugiero que revise this artículo para una solución más limpia.

+1

Si bien esto puede responder teóricamente a la pregunta, nos gustaría que incluya las partes esenciales del artículo vinculado en su respuesta, y proporcione el [enlace de referencia] (http://meta.stackexchange.com/q/8259) Si no se hace eso, la respuesta corre peligro a causa de la podredumbre del enlace. – Kev

+0

El contenido referido en la página vinculada es muy conciso. Una vez tuve el mismo requisito en una aplicación de iPhone y encontré útil esta página. – Omtara

+0

Gracias por esa referencia Omtara. Es perfecto. –

-1
NSDate *Date=[datePicker date]; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd.MM.yy EEEE h:mm a"]; 
+0

Eso no responde la pregunta. – jbat100

2
NSDateComponents *offsetComponents = [[NSDateComponents alloc] autorelease]; 
[offsetComponents setDay:1]; 

newDate = [[[CalendarContainer sharedCalendarContainer] gregorian] dateByAddingComponents:offsetComponents toDate:currentlyDisplayedDate options:0]; 
8
NSDate *now = [NSDate date]; 
    int daysToAdd = 1; 
    NSDate *newDate = [now dateByAddingTimeInterval:60*60*24*daysToAdd]; 
3

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.

1

en Swift 2.1.X y xcode 7.1 OSX 10.10.5, puede añadir cualquier número de días hacia adelante y hacia atrás utilizando la función

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! 
} 

llamada de función para incrementar fecha actual por 9 días

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

llamada a la función de decremento fecha actual por 80 días

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

En Swift 2, utilice extension extender NSDate:

extension NSDate { 

    func addDays(days:Int) -> NSDate{ 
     let newDate = NSCalendar.currentCalendar().dateByAddingUnit(
      .Day, 
      value: days, 
      toDate: self, 
      options: NSCalendarOptions(rawValue: 0)) 

     return newDate! 
    } 
}