我试图从我约会的星期一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?
非常感谢。
答案 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