从另一个开始的一天获得一周
在我用我的方法来尝试这个之前(我有一种感觉是简单的,太抽象了),我想问任何人,如果在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
- iOS 9中的HTTPS请求:NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802)
- 获取Kontakt iBeacon的属性
- NSUserActivity越区切换不适用于自定义数据
- UITableViewCell自定义editingAccessoryView – 没有正确解雇
- Core-Data executeFetchRequest在后台线程中冻结App
- 使用animateKeyframesWithDuration在屏幕上创build一个连续旋转的正方形
- 在更新到iOS 7之后,iOS 6中的所有视图都向上移动,并被导航栏隐藏
- PhoneGap iOS 7和localStorage
- 是否有可能在iOS 7.1中编程禁用“button形状”?