如何获取日历中的前一个和下一个月
问题描述:
我想通过点击按钮获取前一个和下一个月,但这改变了我的一年,而不是一个月。如何获取日历中的前一个和下一个月
我正在尝试使用this link,但它在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) {
}
那么上一个和下个月如何做?
答
请尝试这样。
获取下个月的日期。
斯威夫特3
let nextMonth = Calendar.current.date(byAdding: .month, value: 1, to: Date())
雨燕2.3或更低
let nextMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: NSDate(), options: [])
为了得到前一个月的日期。
斯威夫特3
let previousMonth = Calendar.current.date(byAdding: .month, value: -1, to: Date())
雨燕2.3或更低
let previousMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: NSDate(), options: [])
注:要获得下一个和前一个月我用今天的日期之日起,可以使用你想要的下一个和上一个月的日期的日期,只需更改NSDate()
与您的NSDate
对象。
编辑:对于继续旅行的下个月和前几个月,您需要存储一个日期对象currentDate,并且当您尝试获取下一个和上一个月使用该日期对象并更新它时。
下个月。
let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: currentDate, options: [])
对于前一个月。
let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: currentDate, options: [])
您还可以使用扩展,这将使事情简单。
斯威夫特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)
}
}
雨燕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: [])
}
}
现在距离的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
答
我推荐使用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
和许多其他有用的方法。
Swift 3版本? ''dateByAddingUnit''似乎已被替换为:''Calendar.current.date(byAdding:.day,value:days,to:date)!''虽然我找不到选项了吗? – eonist
Swift 3.0.2,NSCalendar.current.date(byAdding:.month,value:1,to:date) – KTPATEL
**如何在swift3 **中处理范围。 'calendar.range(.Month,startDate:&startOfMonth,interval:&lengthOfMonth,forDate:date)'。 **错误是>调用额外参数'forDate'** – iDeveloper