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?
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()
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
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.