从另一个开始的一天获得一周

在我用我的方法来尝试这个之前(我有一种感觉是简单的,太抽象了),我想问任何人,如果在Swift中有一个更简单/更直接的方法。

任务是让用户在日历中select任何一天。 那么假设他们在一个月前select了星期二。 现在我想把整整一周放到一个数组中。 所以在星期一,星期二,星期三,星期四,星期五,星期六,星期日。 所以arrays总是会保持7天。

这是事情 – 我想改变这个,所以用户可以定义他们的“开始的一天”是什么 – 例如,如果我把星期四作为我的开始日,那么如果我要从几个数组应该看起来像这样:[周四/周五/周六/周日/周一/周二/周三](数组始终以用户的开始date开始),如果在开始之前selectdate,则会在一周内倒退date。 例如,如果我select星期二14,那么它会回到9日星期四作为开始的一天。

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

有没有更好的方法,而不是做这样的事情? 也许一些漂亮的NSDateComponents我不是软件或一些这样的?

感谢您一如既往的帮助!

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

 let cal = NSCalendar.currentCalendar() cal.firstWeekday = 5 // 1 == Sunday, 5 == Thursday 

使用rangeOfUnit确定包含所选date的开始和星期:

 let chosenDate = ... var startOfWeek : NSDate? = nil var lengthOfWeek : NSTimeInterval = 0 cal.rangeOfUnit(.WeekCalendarUnit, startDate: &startOfWeek, interval:&lengthOfWeek, forDate: chosenDate) var endOfWeek = startOfWeek!.dateByAddingTimeInterval(lengthOfWeek) 

迭代date:

 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)) } 

输出示例(今天为选定date):

 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