IOS/Objective-C: NSDate 加 1 个月

IOS/Objective-C: Add One month to NSDate

我正在尝试向 NSDate 添加一个月。但是,我发现以下代码仅在月份数介于 1 和 11 之间时有效。当您将 1 加到 12 时,它不会自动滚动为模数以生成 13->1,也不会增加年份。

newStartDate = [cal dateByAddingUnit:NSCalendarUnitMonth value:1 toDate:startDate options:0];

另一方面,如果您添加秒数,这似乎确实可以用作模数数学,那么一个月中的秒数会因月而异,我不愿意手动编写所有这些可能性的代码。

   //following requires an input for days in month which can be
 28,29,30 or 31 depending on month and leap year status not to mention DST issues
     newStartDate = [newStartDate dateByAddingTimeInterval:30 * 24 * 60 * 60];

谁能推荐一种简单的方法来将日期增加一个月?

提前感谢您的任何建议。

编辑。

原来这个月的行为增加到 12 然后在我的项目中停止似乎是由于它嵌入了一个循环。因此 options:0 的方法本身确实会按预期增加更高的单位。其他选项的行为不同。

NSDate *actualDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateComp = [NSDateComponents new];
[dateComp setMonth:1];
NSDate *dateAfterOneMonth = [calendar dateByAddingComponents:dateComp toDate:actualDate options:0];
NSLog(@"Date after One Month: %@", dateAfterOneMonth);

When you add 1 to 12, it does not automatically roll as a modulus to make 13->1 nor does it increment the year.

您调用了错误的方法。改为调用 this 方法:

let cal = Calendar(identifier: .gregorian)
let d = cal.date(from: DateComponents(
    year: 2018, month: 12, day: 26, hour: 11, minute: 0, second: 0))!
let d2 = cal.date(byAdding: DateComponents(month:1), to: d)
d2 // Jan 26, 2019 at 11:00 AM