objective-c ios nsdate

objective c - Reste 7 días de la fecha actual



objective-c ios (8)

Parece que no puedo restar 7 días de la fecha actual. Así es como lo estoy haciendo:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; [offsetComponents setDay:-7]; NSDate *sevenDaysAgo = [gregorian dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];

SevenDaysAgo obtiene el mismo valor que la fecha actual.

Por favor ayuda.

EDITAR: En mi código olvidé reemplazar la variable que obtiene la fecha actual con la correcta. Entonces el código anterior es funcional.


Swift 3

Calendar.current.date(byAdding: .day, value: -7, to: Date())


La respuesta de dymv funciona muy bien. Esto lo puedes usar en forma rápida

extension NSDate { static func changeDaysBy(days : Int) -> NSDate { let currentDate = NSDate() let dateComponents = NSDateComponents() dateComponents.day = days return NSCalendar.currentCalendar().dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))! } }

Puedes llamar esto con

NSDate.changeDaysBy(-7) // Date week earlier NSDate.changeDaysBy(14) // Date in next two weeks

Espero que ayude y thx a dymv


PARA SWIFT 3.0

Aquí está la frase, puede reducir los días, meses, días por cualquier conteo como por ejemplo aquí, he reducido el año actual de la fecha del sistema por 100 años, puede hacerlo por día, mes, simplemente configure el contador y guárdelo en un array, puede esta matriz en cualquier lugar, luego func currentTime ()

{ let date = Date() let calendar = Calendar.current var year = calendar.component(.year, from: date) let month = calendar.component(.month, from: date) let day = calendar.component(.day, from: date) let pastyear = year - 100 var someInts = [Int]() printLog(msg: "/(day):/(month):/(year)" ) for _ in pastyear...year { year -= 1 print("/(year) ") someInts.append(year) } print(someInts) }


Si está ejecutando al menos iOS 8 o OS X 10.9, hay una manera aún más clara:

NSDate *sevenDaysAgo = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:-7 toDate:[NSDate date] options:0];

O bien, con Swift 2:

let sevenDaysAgo = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -7, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))

Y con Swift 3 y hasta se vuelve aún más compacto:

let sevenDaysAgo = Calendar.current.date(byAdding: .day, value: -7, to: Date())


Swift 3.0

let date = Date() - 7 * 24 * 60 * 60


Swift 3:

Una modificación a la respuesta de Dov.

extension Date { func dateBeforeOrAfterFromToday(numberOfDays :Int?) -> Date { let resultDate = Calendar.current.date(byAdding: .day, value: numberOfDays!, to: Date())! return resultDate } }

Uso:

let dateBefore = Date().dateBeforeOrAfterFromToday(numberOfDays : -7) let dateAfter = Date().dateBeforeOrAfterFromToday(numberOfDays : 7) print ("dateBefore : /(dateBefore), dateAfter :/(dateAfter)")


use el método dateByAddingTimeInterval:

NSDate *now = [NSDate date]; NSDate *sevenDaysAgo = [now dateByAddingTimeInterval:-7*24*60*60]; NSLog(@"7 days ago: %@", sevenDaysAgo);

salida:

7 days ago: 2012-04-11 11:35:38 +0000

Espero eso ayude


código:

NSDate *currentDate = [NSDate date]; NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; [dateComponents setDay:-7]; NSDate *sevenDaysAgo = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:currentDate options:0]; NSLog(@"/ncurrentDate: %@/nseven days ago: %@", currentDate, sevenDaysAgo); [dateComponents release];

salida:

currentDate: 2012-04-22 12:53:45 +0000 seven days ago: 2012-04-15 12:53:45 +0000

Y estoy totalmente de acuerdo con JeremyP.

BR.
Eugene