如何在日历-Swift中获得上个月和下个月

iDe*_*per 14 calendar ios swift swift3

我试图通过点击按钮获得上个月和下个月,但这改变了我的一年,而不是一个月.

我正在尝试使用此链接但它在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) {

    }
Run Code Online (Sandbox Code Playgroud)

那么如何在上个月和下个月做到这一点?

Nir*_*v D 40

试试这样吧.

要获得下个月的日期.

Swift 3和Swift 4

let nextMonth = Calendar.current.date(byAdding: .month, value: 1, to: Date())
Run Code Online (Sandbox Code Playgroud)

Swift 2.3或更低

let nextMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: NSDate(), options: [])
Run Code Online (Sandbox Code Playgroud)

获取上个月的日期.

斯威夫特3

let previousMonth = Calendar.current.date(byAdding: .month, value: -1, to: Date())
Run Code Online (Sandbox Code Playgroud)

Swift 2.3或更低

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

注意:要获取我今天使用的下一个月和上个月的日期,您可以使用您希望下一个月和上个月日期的日期,只需更改NSDate()您的NSDate对象即可.

编辑:对于下个月和前几个月的继续旅行,您需要存储一个日期对象currentDate,当您尝试获取下一个月和上个月时使用该日期对象并更新它.

下个月.

let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: currentDate, options: [])
Run Code Online (Sandbox Code Playgroud)

上个月.

let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: currentDate, options: [])
Run Code Online (Sandbox Code Playgroud)

您还可以使用扩展程序来简化操作.

斯威夫特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)
    }
}
Run Code Online (Sandbox Code Playgroud)

Swift 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: [])
    }
}
Run Code Online (Sandbox Code Playgroud)

现在只需从currentDate获取日期.

currentDate = currentDate.getNextMonth()
currentDate = currentDate.getPreviousMonth()
Run Code Online (Sandbox Code Playgroud)