我正在尝试获取给定月份内的日期。
我的计划是
- 获取给定月份的开始日期和结束日期。
- 获取该范围内的所有日期。
- 迭代它们并使用以下方法消除周末内的日期isDateInWeekend method.
其余日期为工作日。
所以我创建了两个NSDate
扩展方法来获取月份的开始日期和结束日期。
extension NSDate {
var startOfMonth: NSDate {
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Year, .Month], fromDate: self)
return calendar.dateFromComponents(components)!
}
var endOfMonth: NSDate {
let calendar = NSCalendar.currentCalendar()
let components = NSDateComponents()
components.month = 1
return (calendar.dateByAddingComponents(components, toDate: self.startOfMonth, options: NSCalendarOptions())?.dateByAddingTimeInterval(-1))!
}
}
现在我陷入了步骤#2。我找不到一种方法来获取给定开始日期和结束日期的日期范围。
有没有办法做到这一点?
-
获取当前日历
let calendar = NSCalendar.currentCalendar()
-
Get the month
and year
当前日期的日期组件
let components = calendar.components([.Year, .Month], fromDate: NSDate())
-
获取该月第一天的日期
let startOfMonth = calendar.dateFromComponents(components)!
-
获取当前月份的天数
let numberOfDays = calendar.rangeOfUnit(.Day, inUnit: .Month, forDate: startOfMonth).length
-
创建一个数组NSDate
当月每天的实例
let allDays = Array(0..<numberOfDays).map{ calendar.dateByAddingUnit(.Day, value: $0, toDate: startOfMonth, options: [])!}
-
过滤周末内的日子
let workDays = allDays.filter{ !calendar.isDateInWeekend($0) }
Swift 3:
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month], from: Date())
let startOfMonth = calendar.date(from:components)!
let numberOfDays = calendar.range(of: .day, in: .month, for: startOfMonth)!.upperBound
let allDays = Array(0..<numberOfDays).map{ calendar.date(byAdding:.day, value: $0, to: startOfMonth)!}
let workDays = allDays.filter{ !calendar.isDateInWeekend($0) }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)