web-dev-qa-db-fra.com

Comment obtenir le mois précédent et le mois prochain dans calendar-Swift

J'essaie d'obtenir le mois précédent et le mois prochain en cliquant sur le bouton, mais cela a changé mon année et non mon mois.

Je l'essaie en utilisant ce lien mais c'est en 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) {

    }

Alors, comment le faire pour le mois précédent et le mois suivant?

12
iDeveloper

Essayez comme ça.

Pour obtenir la date du mois prochain.

Swift 3 et Swift 4

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

Swift 2.3 ou inférieur

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

Pour obtenir la date du mois précédent.

Swift 3

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

Swift 2.3 ou inférieur

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

Remarque: Pour obtenir la date du mois précédent et le mois précédent, j’ai utilisé la date du jour, vous pouvez utiliser la date à partir de laquelle vous voulez la date du mois précédent et le mois précédent, il suffit de changer NSDate() avec votre objet NSDate.

Edit: Pour continuer à voyager les mois suivants et précédents, vous devez stocker un objet de date currentDate et, lorsque vous essayez d’obtenir le mois précédent et précédent, utilisez cet objet de date et mettez-le à jour.

Pour le mois prochain.

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

Pour le mois précédent.

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

Vous pouvez également utiliser l'extension qui facilitera les choses.

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 ou inférieur

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: [])
    }
}

Maintenant, obtenez simplement la date de currentDate.

currentDate = currentDate.getNextMonth()
currentDate = currentDate.getPreviousMonth()
31
Nirav D
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
2

Je recommanderais d'utiliser SwiftDate library:

let date = Date()
let nextMonthDate = date.nextMonth(at: .auto)
let prevMonthDate = date.prevMonth(at: .auto)

Vous pouvez utiliser .start et .end au lieu de .auto. Regardez les informations sur nextMonth par exemple:

lorsque .auto date d'évaluation est calculée en ajoutant un mois à la date du jour.

Si vous transmettez la date de résultat .start au premier jour du mois suivant (à 00:00:00).

Si vous transmettez la date de résultat .end au dernier jour du mois suivant (à 23:59:59).

La bibliothèque contient également prevWeek/nextWeek et de nombreuses autres méthodes utiles.

0
algrid