swift - 获取从星期一开始的本周日期数组
问题描述
我目前有这个代码:
public var daysOfWeek: [Date]? {
let calendar = Calendar.current
let today = self
let dayOfWeek = calendar.component(.weekday, from: today)
if let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today){
let days = (weekdays.lowerBound ..< weekdays.upperBound).compactMap {
calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today)
}
return days
}else{
return nil
}
}
这是 Date 对象的扩展。
我需要做同样的事情,但是让日历返回我从星期一开始而不是星期日开始的星期几。
解决方案
您只需要使用 iso8601 日历获取一周的第一天,其中第一个工作日是星期一,然后添加 0 到 6 天。试试这样:
extension Calendar {
static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
var startOfWeek: Date {
return Calendar.iso8601.date(from: Calendar.iso8601.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))!
}
var daysOfWeek: [Date] {
let startOfWeek = self.startOfWeek
return (0...6).compactMap{ Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)}
}
}
Date().daysOfWeek // ["Aug 13, 2018 at 12:00 AM", "Aug 14, 2018 at 12:00 AM", "Aug 15, 2018 at 12:00 AM", "Aug 16, 2018 at 12:00 AM", "Aug 17, 2018 at 12:00 AM", "Aug 18, 2018 at 12:00 AM", "Aug 19, 2018 at 12:00 AM"]
推荐阅读
- java - 如何动态地增加布局并知道用户点击了女巫?
- python - 在 RStudio 中配置 python,virtualenvs 不起作用
- java - Java BufferedReader readLine() 在 read() 后突然不起作用
- c++ - 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- python - 如何从字典中获取值
- oracle - 如何使用 TYPE RECORD 调用过程?
- c++ - 为什么 c++ 不允许(自动)强制转换?
- excel - 如何将可见的自动筛选行插入另一个工作表(不包括标题)
- c# - Windows 窗体在 ComboBox 中显示错误的值
- reactjs - Reactjs-Redux 中关于 Store 的说明