I am trying to get previous and next month by click on button but this has changed my year, not month.
I am trying it from using this answer but it is in 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) { }
So how to do it for both previous and next month?
var lastMonthDate = Calendar. current. date(byAdding: . month, value: -1, to: date) calendar.
Same strategy as @MartinR answer, as short as possible: let cal = NSCalendar. currentCalendar() let date = NSDate() var result = map(-6... 0) { delta -> Int in cal.
day = -1 return Calendar. current. date(byAdding: comp, to: self. startOfMonth()!) } }
Try like this.
To get date of next month.
Swift 3 and Swift 4
let nextMonth = Calendar.current.date(byAdding: .month, value: 1, to: Date())
Swift 2.3 or lower
let nextMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: NSDate(), options: [])
To get date of previous month.
Swift 3
let previousMonth = Calendar.current.date(byAdding: .month, value: -1, to: Date())
Swift 2.3 or lower
let previousMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: NSDate(), options: [])
Note: To get date of next and previous month I have used todays date, you can use date from which you want next and previous month date, just change NSDate()
with your NSDate
object.
Edit: For continues traveling of next and previous months you need to store one date object currentDate and when you try to get next and previous month use that date object and update it.
For next month.
let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: currentDate, options: [])
For previous month.
let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: currentDate, options: [])
You can also use extension that will make thing easy.
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) } }
Swift 2.3 or lower
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: []) } }
Now just get date from currentDate.
currentDate = currentDate.getNextMonth() currentDate = currentDate.getPreviousMonth()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With