特定日期的日期列表Swift

时间:2017-06-07 15:24:28

标签: ios swift3

我需要获取一周中给定日期的日期列表。

举个例子: 如果用户从选择器中选择随机日期如2017-6-7, 我需要得到并显示一周的日期。 [2017-6-4,2017-6-5,2017-6-6,2017-6-7,2017-6-8,2017-6-9,2017-6-10]

我无法在互联网上找到任何解决方案。

谢谢

3 个答案:

答案 0 :(得分:4)

试试这个:

let dateInWeek = Date()//7th June 2017

let calendar = Calendar.current
let dayOfWeek = calendar.component(.weekday, from: dateInWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: dateInWeek)!
let days = (weekdays.lowerBound ..< weekdays.upperBound)
    .flatMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: dateInWeek) }

print(days)

它会给你这个:

  

2017年6月4日(星期日)
  2017年6月5日
  2017年6月6日
  2017年6月7日
  2017年6月8日
  2017年6月9日
  2017年6月10日(星期六)

从孟加拉国开始
以上是我的日历的默认行为,它是从星期日开始的原因 如果你想从星期一开始,那就做这个改变:

let dayOfWeek = calendar.component(.weekday, from: dateInWeek) - 1

这取决于您日历所在的区域设置。

答案 1 :(得分:1)

这是使用Calendar

的日期数学技能的起点
var calendar = Calendar.current
calendar.firstWeekday = 1 // adjust first weekday if necessary
var startOfWeek = Date()
var interval : TimeInterval = 0.0
_ = calendar.dateInterval(of:.weekOfYear, start: &startOfWeek, interval: &interval, for: Date())
for i in 0..<7 {
    print(calendar.date(byAdding: .day, value: i, to: startOfWeek)!)
}

答案 2 :(得分:0)

你可以使用它。

 let today = Date()
  let  weekStartDate = today.getWeekStartDate(fromDate: today)
   for i in 0..<5 {
    let nextDate = weekStartDate?.getNextDay(value: i, currentDate:weekStartDate)
}

func getWeekStartDate(fromDate : Date?) -> Date? {

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"

        if let date = fromDate {
            var calendar = Calendar(identifier: .gregorian)
            calendar.firstWeekday = 3
            var startDate : Date = Date()
            var interval : TimeInterval = 0

            if calendar.dateInterval(of: .weekOfYear, start: &startDate, interval: &interval, for: date) {
                print("Start of week is \(startDate)")
                // prints "Start of week is 2017-01-01 06:00:00 +0000"
                return startDate
            }
        }
        return nil
    }


     func getNextDay(value : Int, currentDate : Date?) -> Date? {

            let dayComponenet = NSDateComponents()
            dayComponenet.day = value

            let theCalendar = NSCalendar.current
            let nextDate = theCalendar.date(byAdding: dayComponenet as DateComponents, to: currentDate!)
            return nextDate

        }

希望这会有所帮助!