Ios 从不同的开始日开始一周

Ios 从不同的开始日开始一周,ios,swift,ios8,Ios,Swift,Ios8,在我尝试使用我的方法之前(我觉得这是一种过于简单和冗长的方法),我想问问任何人是否有更简单/更直接的Swift方法 任务是让用户选择日历中的任何一天。假设他们在一个月前选择了星期二。 现在我想把这整周的时间放到一个数组中。所以之前的周一,然后是周二,然后是周三,周四,周五,周六,周日。因此阵列将始终保持7天 这里有一件事-我想更改它,以便用户可以定义他们的“开始日期”-例如,如果我指定星期四为我的开始日期,那么如果我从几个月前再次随机选择一个星期二,数组应该如下所示:[Thurs/Fri/Sat

在我尝试使用我的方法之前(我觉得这是一种过于简单和冗长的方法),我想问问任何人是否有更简单/更直接的Swift方法

任务是让用户选择日历中的任何一天。假设他们在一个月前选择了星期二。 现在我想把这整周的时间放到一个数组中。所以之前的周一,然后是周二,然后是周三,周四,周五,周六,周日。因此阵列将始终保持7天

这里有一件事-我想更改它,以便用户可以定义他们的“开始日期”-例如,如果我指定星期四为我的开始日期,那么如果我从几个月前再次随机选择一个星期二,数组应该如下所示:[Thurs/Fri/Sat/Sun/Mon/Tues/Wed](数组始终以用户的开始日期开始)如果你在开始日期之前选择了一个日期,你会倒退一周。例如,如果我选择14号星期二,那么它会回到9号星期四作为开始日

我的方法是简单地做一个循环,从用户指定的日期开始,向后走,直到到达开始日期,然后向前走,直到到达相应的结束日期

有没有更好的方法来代替这样做?也许是一些我不熟悉的漂亮组件或类似的东西


谢谢你一如既往的帮助

您可以设置当前日历的
firstWeekday
属性来确定 所有日历计算的一周的第一天:

let cal = NSCalendar.currentCalendar()
cal.firstWeekday = 5 // 1 == Sunday, 5 == Thursday
使用
RangeoUnit
确定包含所选日期的一周的开始和结束时间:

let chosenDate = ...
var startOfWeek : NSDate? = nil
var lengthOfWeek : NSTimeInterval = 0
cal.rangeOfUnit(.WeekCalendarUnit, startDate: &startOfWeek, interval:&lengthOfWeek, forDate: chosenDate)
var endOfWeek = startOfWeek!.dateByAddingTimeInterval(lengthOfWeek)
Thursday, 31.07.2014
Friday, 01.08.2014
Saturday, 02.08.2014
Sunday, 03.08.2014
Monday, 04.08.2014
Tuesday, 05.08.2014
Wednesday, 06.08.2014
迭代日期:

var date = startOfWeek!
let formatter = NSDateFormatter()
formatter.dateFormat = "EEEE, dd.MM.yyyy"

while date.compare(endOfWeek) == NSComparisonResult.OrderedAscending  {
    println(formatter.stringFromDate(date))
    date = cal.dateByAddingUnit(.DayCalendarUnit, value: 1, toDate: date, options: NSCalendarOptions(0))
}
输出示例(选择的日期为今天):


如果您选择开始日后的一天,那么如果开始日是星期四,您选择星期五,您希望从所选日期前一天的星期四开始的一周,还是从所选日期后的下一个星期四开始的一周?我不知道单位的范围,我很高兴您让我这么做。将继续在NSDate上阅读更多内容,但非常感谢:)