Swift - 从工作日数组中获取下一个日期

标签 swift swift3 nsdate nscalendar

上下文

我正在制作一个应用程序,其中我的任务有截止日期,一旦完成,我想根据用户选择的一周中的某一天重复模式设置一个新的截止日期。

我将到期日期保存为日期。我将重复模式保存为 Int32(1 代表星期日,2 代表星期一,4 代表星期二...),但我可以轻松地将其保存为代表每天的字符串或数字数组

问题

如何将下一个截止日期设为 Date(以便我可以重复该任务)?

示例

如果我有一项任务在周六完成,并且每周一和周三有重复模式,我希望将其设置为下周一。如果是他们周一或周二完成我想设置下周三。

选择重复图案的照片

选择其他日期时,从不选择月份。我知道如何处理这个月。问题只是一周中的几天

最佳答案

永远不要使用 86400 进行日期数学运算,CalendarIndexSet 有强大的方法来做到这一点:

// 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/

相关文章:

objective-c - 有没有一种简单的方法可以将 ISO8601 时间戳转换为格式化的 NSDate?

swift - 在 Swift 中将字符串转换为日期

swift - updateData FieldValue.arrayUnion([value]) [swift] 的 Firebase Cloud Firestore 安全规则

swift - 将汉堡包按钮添加到导航栏

iOS - 无法访问 UITableViewCell 类中的 UITextView 委托(delegate)

objective-c - SWIFT 3.0 迁移错误 - 通用 Obj-C 类的扩展无法在运行时访问该类的通用参数

ios - 如何使用具有 3 个组件的 UIPickerView 填充 UITextField?

swift - 在 Swift 中访问共享容器中的自定义对象

ios - 如何在数组中然后在 TableView 中显示来自 Firebase 的用户昵称(For 循环问题)

iOS7如何根据指定时区获取当前时间和日期?