Как получить предыдущий и следующий месяц
Я пытаюсь получить предыдущий и следующий месяц, если нажать на кнопку, но это изменило мой год, а не месяц.
Я пытаюсь использовать этой ссылке но это в Objective-С.
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) {
}
Итак, как это сделать как в предыдущем, так и в следующем месяце?
3 ответов
попробуйте вот так.
чтобы получить дату следующего месяца.
Swift 3
let nextMonth = Calendar.current.date(byAdding: .month, value: 1, to: Date())
Swift 2.3 или ниже
let nextMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: NSDate(), options: [])
чтобы получить дату предыдущего месяца.
Swift 3
let previousMonth = Calendar.current.date(byAdding: .month, value: -1, to: Date())
Swift 2.3 или ниже
let previousMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: NSDate(), options: [])
Примечание: для получение следующего и предыдущего месяца я использовал сегодняшняя дата, вы можете использовать дату, с которой вы хотите следующую и предыдущую дату месяца, просто измените NSDate()
С
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
Я бы посоветовал использовать SwiftDate библиотека:
let date = Date()
let nextMonthDate = date.nextMonth(at: .auto)
let prevMonthDate = date.prevMonth(at: .auto)
можно использовать .start
и .end
вместо .auto
. Посмотрите на информацию о nextMonth
например:
, когда
.auto
оцененная дата рассчитывается путем добавления одного месяца к текущей дате.если вы передадите
.start
дата результат первого дня следующего месяца (в 00:00:00).если вы передадите
.end
дата результата-последний день в следующем месяце (в 23:59:59).
библиотека также содержит prevWeek
/nextWeek
и многие другие полезные методы.