2011-02-14 11 views

Respuesta

24

Compruebe hacia fuera mi respuesta a esta pregunta: NSDate substract one month

He aquí una muestra, modificado por su pregunta:

NSDate *today = [[NSDate alloc] init]; 
NSLog(@"%@", today); 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; 
[offsetComponents setMinute:-10]; // note that I'm setting it to -1 
NSDate *endOfWorldWar3 = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0]; 
NSLog(@"%@", endOfWorldWar3); 

Espero que esto ayude!

+0

Gracias hermano, esto funciona bien. – Ishu

+0

NSGregorianCalendar está en desuso desde iOS 8 en adelante. Quizás podamos actualizar esta respuesta. – TheJeff

61

Uso siguiente:

// gives new date object with time 15 minutes earlier 
NSDate *newDate = [oldDate dateByAddingTimeInterval:-60*15]; 
+0

no está funcionando. – Ishu

+7

Sí, funciona !!! – shannoga

+1

Mucho más simple que la respuesta aceptada –

11

Desde iOS 8 no es el más conveniente dateByAddingUnit:

//subtract 15 minutes 
let calendar = NSCalendar.autoupdatingCurrentCalendar() 
newDate = calendar.dateByAddingUnit(.CalendarUnitMinute, value: -15, toDate: originalDate, options: nil) 
6

La respuesta Swift actual es obsoleta como de Swift 2.x. Aquí está una versión actualizada:

let originalDate = NSDate() // "Jun 8, 2016, 12:05 AM" 
let calendar = NSCalendar.currentCalendar() 
let newDate = calendar.dateByAddingUnit(.Minute, value: -15, toDate: originalDate, options: []) // "Jun 7, 2016, 11:50 PM" 

El valor NSCalendarUnitOptionSetType ha cambiado a .Minute y ya no puede pasar en nil para options. En cambio, usa una matriz vacía.

Actualización para Swift 3 utilizando las nuevas Date y Calendar clases:

let originalDate = Date() // "Jun 13, 2016, 1:23 PM" 
let calendar = Calendar.current 
let newDate = calendar.date(byAdding: .minute, value: -5, to: originalDate, options: []) // "Jun 13, 2016, 1:18 PM"