代码之家  ›  专栏  ›  技术社区  ›  Laurence Wingo

如何在日历中使用NSCalendar range函数?

  •  2
  • Laurence Wingo  · 技术社区  · 6 年前

    extension Calendar {
        /**
         Returns a tuple containing the start and end dates for the week that the
         specified date falls in.
         */
        func weekDatesForDate(date: NSDate) -> (start: NSDate, end: NSDate) {
            var interval: TimeInterval = 0
            var start: NSDate?
            range(of: .weekOfYear, start: &start, interval: &interval, for: date as Date)
            let end = start!.addingTimeInterval(interval)
    
            return (start!, end)
        }
    }
    

    extension NSCalendar {
        /**
         Returns a tuple containing the start and end dates for the week that the
         specified date falls in.
         */
        func weekDatesForDate(date: NSDate) -> (start: NSDate, end: NSDate) {
            var interval: TimeInterval = 0
            var start: NSDate?
            range(of: .weekOfYear, start: &start, interval: &interval, for: date as Date)
            let end = start!.addingTimeInterval(interval)
    
            return (start!, end)
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   vadian    6 年前

    相当于 range(of:start:interval:for:) 在里面 Calendar dateInterval(of:start:interval:for:)

    不要使用 NSDate 迅速

    extension Calendar {
        /**
         Returns a tuple containing the start and end dates for the week that the
         specified date falls in.
         */
        func weekDatesForDate(date: Date) -> (start: Date, end: Date) {
            var interval: TimeInterval = 0
            var start = Date()
            dateInterval(of: .weekOfYear, start: &start, interval: &interval, for: date)
            let end = start.addingTimeInterval(interval)
    
            return (start, end)
        }
    }
    

    DateInterval 作为返回值而不是元组:

    extension Calendar {
        /**
         Returns a tuple containing the start and end dates for the week that the
         specified date falls in.
         */
        func weekDatesForDate(date: Date) -> DateInterval {
            var interval: TimeInterval = 0
            var start = Date()
            dateInterval(of: .weekOfYear, start: &start, interval: &interval, for: date)
            let end = start.addingTimeInterval(interval)
            return DateInterval(start: start, end: end)
        }
    }