如何在日历中获取前一个和下一个月

我试图通过点击button得到前一个和下个月,但这已经改变了我的一年,而不是一个月。

我正在尝试使用这个链接,但它在Objective-C中。

func firstDateOfMonth(){ let components = calendar.components([.Year, .Month], fromDate: date) let startOfMonth = calendar.dateFromComponents(components)! print(dateFormatatter.stringFromDate(startOfMonth)) // 2015-11-01 } func lastDateOfMonth(){ let components = calendar.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: date) let month = components.month let year = components.year let startOfMonth1 = ("01-\(month)-\(year)") var startOfMonth : NSDate? var lengthOfMonth : NSTimeInterval = 0 calendar.rangeOfUnit(.Month, startDate: &startOfMonth, interval: &lengthOfMonth, forDate: date) let endOfMonth = startOfMonth!.dateByAddingTimeInterval(lengthOfMonth - 1) print(dateFormatatter.stringFromDate(endOfMonth)) } func monthCalculation(){ firstDateOfMonth() lastDateOfMonth() } @IBAction func previousMonthBtnAction(sender: AnyObject) { let componen = calendar.components([.Day , .Month , .Year], fromDate: date) componen.month = -1 self.date = calendar.dateFromComponents(componen)! print(self.date) } @IBAction func nextMonthBtnAction(sender: AnyObject) { } 

那么上个月和下个月怎么做?

像这样尝试。

得到下个月的date

Swift 3

 let nextMonth = Calendar.current.date(byAdding: .month, value: 1, to: Date()) 

迅速2.3或更低

 let nextMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: NSDate(), options: []) 

获得上个月的date。

Swift 3

 let previousMonth = Calendar.current.date(byAdding: .month, value: -1, to: Date()) 

迅速2.3或更低

 let previousMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: NSDate(), options: []) 

注意:为了得到下个月和上个月的date,我使用了今天的date,你可以使用你想要的下一个和上个月的date,只需要用你的NSDate对象改变NSDate()

编辑:为了继续旅行的下个月和前几个月,你需要存储一个date对象currentDate,当你试图获取下一个和上个月使用该date对象,并更新它。

下个月。

 let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: currentDate, options: []) 

上个月。

 let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: currentDate, options: []) 

你也可以使用扩展,使事情变得简单。

Swift 3

 extension Date { func getNextMonth() -> Date? { return Calendar.current.date(byAdding: .month, value: 1, to: self) } func getPreviousMonth() -> Date? { return Calendar.current.date(byAdding: .month, value: -1, to: self) } } 

迅速2.3或更低

 extension NSDate { func getNextMonth() -> NSDate?{ return NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: self, options: []) } func getPreviousMonth() -> NSDate?{ return NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: self, options: []) } } 

现在只需从currentDate获取date。

 currentDate = currentDate.getNextMonth() currentDate = currentDate.getPreviousMonth() 
 var currentDate = NSDate() func nextMonth() -> NSDate { let nextDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: currentDate, options: [])! currentDate = nextDate return nextDate } print(nextMonth()) // 2016-11-01 20:11:15 +0000 print(nextMonth()) // 2016-12-01 21:11:15 +0000 print(nextMonth()) // 2017-01-01 21:11:15 +0000