首页 > 解决方案 > Swift - 为当前周创建一个有效日期,仅将星期几作为字符串

问题描述

我需要仅使用一周中的某一天为当前一周(周日 - 周六)创建一个有效日期。

例如:今天的日期是 2020 年 9 月 17 日。所以周范围是 9 月 13 日星期日 - 9 月 19 日星期六。

给定“Tuesday”,我需要将此字符串转换为:Tuesday, September 15th, 2020 作为日期类型。

我试过这样做,但我想出了一个非常混乱、不可靠的解决方案。

任何帮助是极大的赞赏。

标签: swiftdatetype-conversion

解决方案


这是我要做的:

let calendar = Calendar.current

var dateComponents = calendar.dateComponents([.year, .month, .weekOfYear], from: Date())
dateComponents.weekday = 1 // Figure out a way to map "Sunday" = 1, "Monday" = 2, etc..
let date = calendar.date(from: dateComponents)

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, MMMM dd, yyyy"

print(dateFormatter.string(from: date!)) // Sunday, September 13, 2020

我可能会考虑为工作日创建一个枚举。您可以使用 String 值对其进行初始化,并使用一个函数为其返回 Int 值。

enum Weekday: Int {
    case sunday = 1
    case monday = 2
    case tuesday = 3
    case wednesday = 4
    case thursday = 5
    case friday = 6
    case saturday = 7

    init?(_ stringValue: String) {
        switch stringValue {
        case "Sunday":
            self = .sunday
        case "Monday":
            self = .monday
        case "Tuesday":
            self = .tuesday
        case "Wednesday":
            self = .wednesday
        case "Thursday":
            self = .thursday
        case "Friday":
            self = .friday
        case "Saturday":
            self = .saturday
        default:
            return nil
        }
    }
}

然后使用它你会做:

if let weekday = Weekday("Wednesday") {
    // ... code above
    dateComponents.weekday = weekday.rawValue
    // ... some more code 
}

推荐阅读