从NSDate减去分钟数

Ish*_*shu 21 nsdate nstimeinterval ios

我想减去一些分钟15分钟10分钟等等,而我现在有时间对象现在我想减去分钟.

小智 71

使用以下:

// gives new date object with time 15 minutes earlier
NSDate *newDate = [oldDate dateByAddingTimeInterval:-60*15]; 
Run Code Online (Sandbox Code Playgroud)

  • 这更简单但是有一些边缘情况它没有(例如闰秒).这适用于任何时候你看到的东西,假设一分钟60秒,一小时60分钟,或任何其他快捷方式.使用其他`NSCalendar`这个问题的答案利用了已经处理过所有边缘情况的现有功能集. (2认同)

don*_*kim 25

看看我对这个问题的回答:NSDate减去一个月

以下是针对您的问题修改的示例:

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);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


Ben*_*ard 11

从iOS 8开始,更方便dateByAddingUnit:

//subtract 15 minutes
let calendar = NSCalendar.autoupdatingCurrentCalendar()
newDate = calendar.dateByAddingUnit(.CalendarUnitMinute, value: -15, toDate: originalDate, options: nil)
Run Code Online (Sandbox Code Playgroud)


JAL*_*JAL 6

从Swift 2.x开始,当前的Swift答案已经过时了.这是一个更新版本:

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"
Run Code Online (Sandbox Code Playgroud)

NSCalendarUnit OptionSetType值已更改为.Minute,您可以不再传递niloptions.相反,使用一个空数组.

使用new DateCalendar类更新Swift 3 :

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"
Run Code Online (Sandbox Code Playgroud)

更新上面的Swift 4代码:

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