如何快速开始和结束一周?这是我的代码
extension Date {
    var startOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 1, to: sunday)
    }
    var endOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 7, to: sunday)
    }
}
我这样打电话
let startWeek = Date().startOfWeek
let endWeek = Date().endOfWeek
print(startWeek!)
print(endWeek!)
var dateFormat1 = DateFormatter()
dateFormat1.dateFormat = "dd-MM-yy"
let startWeek2 = dateFormat1.string(from: startWeek!)
var dateFormat12 = DateFormatter()
dateFormat12.dateFormat = "dd-MM-yy"
let endWeek2 = dateFormat12.string(from: endWeek!)
print(startWeek2)
print(endWeek2)
和输出
2017-09-24 18:30:00 +0000
2017-09-30 18:30:00 +0000
25-09-17
01-10-17
这是Swift 3版本:-
extension Date {
    var startOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 1, to: sunday)
    }
    var endOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 7, to: sunday)
    }
}
您可以像这样获取星期开始日期和结束日期:
let startWeek = Date().startOfWeek
let endWeek = Date().endOfWeek
print(startWeek ?? "not found start date")
print(endWeek ?? "not found end date") 
你的代码工作得很好。如果您在 Playground 中运行代码,您可以看到实际的Date对象,而不是字符串表示形式。即使您没有指定 a DateFormatter,在执行 时print(Date()),Swift 也会使用 aDateFormatter来打印Date对象,因此该值将是相对时间,而不是对象提供的绝对时间点Date。
在 Playground 中,您可以看到实际startOfWeekis"Sep 25, 2017 at 12:00 AM"和endOfWeekis "Oct 1, 2017 at 12:00 AM",它们是本周的正确值。
不要用于print(Date())检查对象的正确性Date,因为正如您所看到的,由于DateFormatter使用的底层,它会产生意想不到的结果。
| 归档时间: | 
 | 
| 查看次数: | 5048 次 | 
| 最近记录: |