代码之家  ›  专栏  ›  技术社区  ›  Lee Probert

从星期一开始获取当前星期的一系列日期

  •  2
  • Lee Probert  · 技术社区  · 6 年前

    我现在有这个代码:

    public var daysOfWeek: [Date]? {
    
        let calendar = Calendar.current
    
        let today = self
        let dayOfWeek = calendar.component(.weekday, from: today)
        if let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today){
    
            let days = (weekdays.lowerBound ..< weekdays.upperBound).compactMap {
                calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today)
            }
            return days
        }else{
            return nil
        }
    }
    

    我需要做同样的事情,但是让日历把一周中从星期一开始的几天还给我,而不是星期天。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Leo Dabus    6 年前

    您只需要使用iso8601日历获得一周中的第一天,其中第一个工作日是星期一,并将其从0天添加到6天。这样试试:

    extension Calendar {
        static let iso8601 = Calendar(identifier: .iso8601)
    }
    extension Date {
        var startOfWeek: Date {
            return Calendar.iso8601.date(from: Calendar.iso8601.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))!
        }
        var daysOfWeek: [Date] {
            let startOfWeek = self.startOfWeek
            return (0...6).compactMap{ Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)}
        }
    }
    

    Date().daysOfWeek  // ["Aug 13, 2018 at 12:00 AM", "Aug 14, 2018 at 12:00 AM", "Aug 15, 2018 at 12:00 AM", "Aug 16, 2018 at 12:00 AM", "Aug 17, 2018 at 12:00 AM", "Aug 18, 2018 at 12:00 AM", "Aug 19, 2018 at 12:00 AM"]