从不同的开始日获得一周

时间:2014-08-06 04:28:17

标签: ios swift ios8

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

任务是让用户选择日历中的任何一天。所以,让他们说他们一个月前选择星期二。 现在我想把整个星期放到一个数组中。所以周一,周二,周三,周四,周五,周六,周日。所以阵列总是会持续7天。

这就是事情 - 我想改变它,以便用户可以定义他们的开始日期"是 - 例如,如果我指定星期四作为我的开始日,那么如果我在几个月前再次选择一个星期二,那么阵列应该是这样的:[周四/周五/周六/周日/周一/周二/周三](数组始终以用户的开始日开始),如果您在开始日期之前选择一个日期,则会向后退一周。因此,例如,如果我选择星期二的14,那么它将回到星期四的第9天作为开始日。

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

有没有更好的方法而不是做那样的事情?也许有些漂亮的NSDateComponents我没有或者其他一些?

感谢您一如既往的帮助!

1 个答案:

答案 0 :(得分:2)

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

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

使用rangeOfUnit确定包含所选日期的开始和周:

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

迭代日期:

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

示例输出(今天作为所选日期):

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
相关问题