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