从另一个开始的一天获得一周
在我用我的方法来尝试这个之前(我有一种感觉是简单的,太抽象了),我想问任何人,如果在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
- 基本的内存pipe理在objective-c(ios)
- iOS:使用蓝牙audio输出(kAudioSessionProperty_OverrideCategoryEnableBluetoothInput)AudioSession
- 如何在iPhone SDK中使用两个button来改变运行时的应用程序语言?
- iOS在共享组目录中保存数据是否安全?
- 我的导航栏显示在故事板中,但不在模拟器中
- 制作一个固定大小的UIView,就像UISwitch(使用IBDesignable)
- 检查UIWebView是否滚动到底部
- OBJ-C操作方法:App在同一设备中使用BLE连接和iBeacon
- 链接到OSX上的iOS模拟器二进制文件