我试图通过单击按钮获取上个月和下个月,但这改变了我的年份,而不是月份。
我正在尝试使用这个答案,但它是在 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) {
}
那么上个月和下个月该怎么做呢?
尝试这样。
获取下个月的日期。
Swift 3 和 Swift 4
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: [])
获取上个月的日期。
斯威夫特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()
更改为您的 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)
}
}
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: [])
}
}
现在只需从 currentDate 获取日期即可。
currentDate = currentDate.getNextMonth()
currentDate = currentDate.getPreviousMonth()
将在此处添加,以防人们下个月也需要。这适用于任何日期:
Swift 5.1 或更高版本 • Xcode 11 或更高版本
extension Calendar {
static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
var year: Int {
Calendar.iso8601.component(.year, from: self)
}
var lastDateOfPreviousMonth: Date? {
DateComponents(calendar: .iso8601, year: year, month: month, day: 0).date
}
var previousMonth: Int {
lastDateOfPreviousMonth?.month ?? 0
}
var firstDateOfMonth: Date? {
DateComponents(calendar: .iso8601, year: year, month: month).date
}
var month: Int {
Calendar.iso8601.component(.month, from: self)
}
var firstDateOfFollowingMonth: Date? {
DateComponents(calendar: .iso8601, year: year, month: month+1).date
}
var followingMonth: Int {
firstDateOfFollowingMonth?.month ?? 0
}
}
Date().lastDateOfPreviousMonth // "Feb 28, 2022 at 12:00 AM"
Date().previousMonth // 2
Date().firstDateOfMonth // "Mar 1, 2022 at 12:00 AM"
Date().month // 3
Date().firstDateOfFollowingMonth // "Apr 1, 2022 at 12:00 AM"
Date().followingMonth // 4
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
斯威夫特5
let date = Date()
let calendar = Calendar.current
let currentYear = Calendar.current.component(.year, from: Date())
let previousYear = currentYear + 1
let nextYear = currentYear + 1
print("\(previousYear)->\(currentYear)->\(nextYear)")
Output:
2018->2019->2020
快乐编码:)
我建议使用 SwiftDate 库:
let date = Date()
let nextMonthDate = date.nextMonth(at: .auto)
let prevMonthDate = date.prevMonth(at: .auto)
您可以使用
.start
和 .end
代替 .auto
。看看有关nextMonth
的信息例如:
当
评估日期是在当前日期上加上一个月来计算时。.auto
如果您通过
,结果日期为下个月的第一天(00:00:00)。.start
如果您通过
,结果日期是下个月的最后一天(23:59:59)。.end
该库还包含
prevWeek
/nextWeek
和许多其他有用的方法。
使用下面的代码片段在 Swift 中获取任何前一年或前一个月的日期
private func getPreviousDate(monthOrYear: String, numberOfMonthOrYear: Int, dateFormat: String) -> String{
var date : Date
if(monthOrYear.lowercased().contains("month")){
date = Calendar.current.date(byAdding: .month, value: -numberOfMonthOrYear, to: Date())!
} else {
date = Calendar.current.date(byAdding: .year, value: -numberOfMonthOrYear, to: Date())!
}
return dateFormatter(dateFormat: dateFormat, date:date)
}
func dateFormatter (dateFormat: String, date: Date) -> String{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
return dateFormatter.string(from: date)
}