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

时间:2016-10-02 17:57:07

标签: ios swift date 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
}

我的问题是它不会在星期一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)

我的问题是:

如何从myDate 返回星期一00:00?

非常感谢。

1 个答案:

答案 0 :(得分:9)

您的代码会在给定的一周内返回第一天 周日或周一(或者其他某天),具体取决于您的地区。

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

cal.firstWeekDay = 2

如果你想要给定周的星期一,独立于什么 本周开始,然后设置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
}

请注意,打印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