Swift 3 函数以格式化字符串打印出最近 7 天

Swift 3 function to print out last 7 days in formatted string

我从其他线程之一得到了一个代码片段,但我想知道是否有人可以帮助我转换这个函数,以便它以这种格式打印出日期:"dd-MM-yyyy"。目前它只打印一天。

func getLast7Dates()
{
  let cal = Calendar.current
  var date = cal.startOfDay(for: Date())
  var days = [Int]()

  for i in 1 ... 7 {
    let day = cal.component(.day, from: date)
    days.append(day)
    date = cal.date(byAdding: .day, value: -1, to: date)!
  }

print(days)
}

我知道我需要使用:

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "dd-MM-yyyy"

但我不知道将它放在函数中的什么位置,因为这是我第一次使用日期。

感谢您的帮助:)

不是将 day 附加到数组,而是附加 date。然后,return 日期数组,并使用您的日期格式化程序映射它们:

import Foundation

func getLast7Dates() -> [Date] {
    let today = Date()

    var days = [Date]()

    for i in 1 ... 7 {
        let date = Calendar.current.date(byAdding: .day, value: -i, to: today)!
        days.append(date)
    }

    return days
}

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"

let dateStrings = getLast7Dates().map(dateFormatter.string(from:))

print(dateStrings)

你可以让它更短:

func getLast7Dates() -> [Date] {
    let today = Date()

    return (-7 ... -1).map{ Calendar.current.date(byAdding: .day, value: [=11=], to: today)!
    }
}

在您的函数中设置一次格式化程序并按如下方式使用它(没有很多其他小的更改):

func getLast7Dates()
{
    let cal = Calendar.current
    let date = cal.startOfDay(for: Date())
    var days = [String]()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy"    

    for i in 1 ... 7 {
        let newdate = cal.date(byAdding: .day, value: -i, to: date)!
        let str = dateFormatter.string(from: newdate)
        days.append(str)
    }

    print(days)
}

你会想要使用这个:

print(dateFormatter.stringFromDate(date))

这方面的文档是 here