Home > Blockchain >  How to use for loop to create multiple dates?
How to use for loop to create multiple dates?

Time:01-30

I have a function here that gets the date, and adds one week to it:

func thingy() {
    let currentDate = Date()

    var dateComponent = DateComponents()
    dateComponent.day = 7

    let futureDate = Calendar.current.date(byAdding: (dateComponent*i), to: currentDate)
    print(futureDate!.formatted())
}

This gets the current date, adds one week to it, and prints out that date.

I want to get a for loop that will give the date, for example maybe 10 weeks in the future, maybe looking something like this:

for i in 1...num[ex: 11] {
    let currentDate = Date()
    var dateComponent = DateComponents()
    dateComponent.day = 7
    let futureDate = Calendar.current.date(byAdding: (dateComponent*i), to: currentDate)

    let match = (title: "Test", date: futureDate)
}

I get this error:

Referencing operator function '*' on 'DurationProtocol' requires that 'DateComponents' conform to 'DurationProtocol'

How do I fix this?

CodePudding user response:

I would advise adding .weekOfYear to the date. E.g., to get an array of Date representing the next ten weeks:

let calendar = Calendar.current
let today = calendar.startOfDay(for: Date())

let dates = (1 ... 10)
    .compactMap { calendar.date(byAdding: .weekOfYear, value: $0, to: today) }
  • Related