上下文
我正在制作一个应用程序,其中我的任务有截止日期,一旦完成,我想根据用户选择的一周中的某一天重复模式设置一个新的截止日期。
我将到期日期保存为日期。我将重复模式保存为 Int32(1 代表星期日,2 代表星期一,4 代表星期二...),但我可以轻松地将其保存为代表每天的字符串或数字数组
问题
如何将下一个截止日期设为 Date(以便我可以重复该任务)?
示例
如果我有一项任务在周六完成,并且每周一和周三有重复模式,我希望将其设置为下周一。如果是他们周一或周二完成我想设置下周三。
选择重复图案的照片
最佳答案
永远不要使用 86400
进行日期数学运算,Calendar
和 IndexSet
有强大的方法来做到这一点:
// Put your weekday indexes in an `IndexSet`
let weekdaySet = IndexSet([1, 2, 4, 7]) // Sun, Mon, Wed and Sat
// Get the current calendar and the weekday from today
let calendar = Calendar.current
var weekday = calendar.component(.weekday, from: Date())
// Calculate the next index
if let nextWeekday = weekdaySet.integerGreaterThan(weekday) {
weekday = nextWeekday
} else {
weekday = weekdaySet.first!
}
// Get the next day matching this weekday
let components = DateComponents(weekday: weekday)
calendar.nextDate(after: Date(), matching: components, matchingPolicy: .nextTime)
关于Swift - 从工作日数组中获取下一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42153018/