Вычтите минуты из NSDate - PullRequest
       5

Вычтите минуты из NSDate

20 голосов
/ 14 февраля 2011

Я хочу вычесть несколько минут 15 минут 10 минут и т. Д., И у меня есть объект даты со временем, теперь я хочу вычесть минуты.

Ответы [ 4 ]

68 голосов
/ 14 февраля 2011

Используйте следующее:

// gives new date object with time 15 minutes earlier
NSDate *newDate = [oldDate dateByAddingTimeInterval:-60*15]; 
25 голосов
/ 14 февраля 2011

Проверьте мой ответ на этот вопрос: NSDate substract один месяц

Вот пример, модифицированный для вашего вопроса:

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

Надеюсь, это поможет!

11 голосов
/ 10 мая 2015

Начиная с iOS 8 есть более удобная dateByAddingUnit:

//subtract 15 minutes
let calendar = NSCalendar.autoupdatingCurrentCalendar()
newDate = calendar.dateByAddingUnit(.CalendarUnitMinute, value: -15, toDate: originalDate, options: nil)
6 голосов
/ 08 июня 2016

Текущий ответ Swift устарел с Swift 2.x. Вот обновленная версия:

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"

Значение NSCalendarUnit OptionSetType изменилось на .Minute, и вы больше не можете передавать nil для options. Вместо этого используйте пустой массив.

Обновление для Swift 3 с использованием новых классов Date и Calendar:

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"

Обновите код выше для Swift 4:

let newDate = calendar.date(byAdding: .minute, value: -5, to: originalDate) // "Jun 13, 2016, 1:18 PM"
...