如何获得本周的00:00?斯威夫特3

0nd*_*re_ 1 date ios swift swift3

我试图从我约会的星期一00:00返回.这是我的代码:

func getMonday(myDate: Date) -> Date {
    let cal = Calendar.current
    let comps = cal.dateComponents([.weekOfYear, .yearForWeekOfYear], from: myDate)
    let beginningOfWeek = cal.date(from: comps)!
    return beginningOfWeek
}
Run Code Online (Sandbox Code Playgroud)

我的问题是它不会在周一00:00返回,而是在周六22:00返回.

例:

    let monday1 = getMonday(myDate: date) //date is: 2016-10-04 17:00:00
    print(monday1) //Prints: 2016-10-01 22:00:00 (Saturday)
Run Code Online (Sandbox Code Playgroud)

我的问题是:

如何从周一00:00返回myDate

非常感谢你.

Mar*_*n R 9

您的代码返回给定周的第一天,可能是星期日或星期一(或者某些其他日期),具体取决于您的语言环境.

如果您希望星期一被认为是第一个工作日,那么设置

cal.firstWeekDay = 2
Run Code Online (Sandbox Code Playgroud)

如果你想要给定周的星期一,而不是一周的开始,那么设置comps.weekday = 2:

func getMonday(myDate: Date) -> Date {
    let cal = Calendar.current
    var comps = cal.dateComponents([.weekOfYear, .yearForWeekOfYear], from: myDate)
    comps.weekday = 2 // Monday
    let mondayInWeek = cal.date(from: comps)!
    return mondayInWeek
}
Run Code Online (Sandbox Code Playgroud)

请注意,打印a Date始终使用GMT时区,您需要一个日期格式化程序来根据您当地的时区打印结果.例:

let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm"

let now = Date()
print(df.string(from: now)) // 2016-10-02 20:16

let monday1 = getMonday(myDate: now)
print(df.string(from: monday1)) // 2016-09-26 00:00
Run Code Online (Sandbox Code Playgroud)