я делаю приложение позволяющее делать записи на доступные даты. У меня есть array с днями недели, на которые можно записаться:
var masterSchedule = [WorkDay(weekDay: 1, startTime: 8, endTime: 16, busyHours: []), WorkDay(weekDay: 4, startTime: 8, endTime: 16, busyHours: [])]
Дни недели обозначены цифрой в значении weekDay.
Мне нужна функция которая смогла бы генерировать Date объекты по выбранным дням недели на месяц вперед.
Другими словами, если человек выбирает что он был бы готов принимать по понедельникам и вторникам, то функция должна вернуть понедельники и вторники на 4 недели вперед.
Код которым я попробовал решить проблему:
func getDates() {
for workDay in masterSchedule {
var components = DateComponents()
components.weekday = workDay.weekDay
components.year = 2021
components.month = 8
let date = Calendar.current.date(from: components) ?? Date()
availableDays.append(date)
}
}
Однако, он не работает и возвращает мне 2 одинаковых Date объекта: 2021-07-31 23:00:00 +0000
Буду очень рад любой помощи!
Спасибо!
юзай date by adding timeInterval для конкретного дня то есть отправляешь день недели и текущую дату и тебе функция должна определить ближайшую дату начиная от текущей с этим днем недели ( что будет точкой отсчета ) и дальше просто цикл на 4 итерации прибавляя по 7 дней
Привет! Спавсибо за ответ, я уже вроде как разобрался с этой проблемой, сделал так: ```func getDates() { for week in 0...3 { for day in masterSchedule { var components = DateComponents() components.weekday = day.weekDay let today = Date().addingTimeInterval(-86400) let calendar = Calendar.current availableDays.append(calendar.nextDate(after: today.addingTimeInterval(TimeInterval(604800*week)), matching: components, matchingPolicy: .nextTime)!) } } }```
let curretDate = Date() let nextWeek = Calendar.current.date(byAdding: .day, value: 7, to: curretDate) В две строчки. От любой даты добавляешь 7 дней и получаешь новую дату
да, спасибо, я примерно так и решил
Обсуждают сегодня