IOS / Objective-C:向NSDate添加一个月

时间:2018-04-26 16:51:16

标签: ios objective-c nsdate

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

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,然后在我的项目中停止似乎是由于它嵌入的循环。所以带选项的方法:0本身会按预期增加更高的单位。其他选项表现不同。

2 个答案:

答案 0 :(得分:1)

  

当您添加1到12时,它不会自动滚动为模数以使13-> 1也不会增加年份。

你说错了方法。改为调用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

答案 1 :(得分: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);