2015-05-19 22 views
3

我想根據NSDate得到一週的第一天。獲取沒有WeekCalendarUnit的星期的第一天

它工作正常,但我有一個警告,因爲WeekCalendarUnit已棄用。

我做了一些研究,我試圖用更換WeekCalendarUnit:

static var CalendarUnitWeekday: NSCalendarUnit { get } 
static var CalendarUnitWeekdayOrdinal: NSCalendarUnit { get } 
static var CalendarUnitWeekOfMonth: NSCalendarUnit { get } 
static var CalendarUnitWeekOfYear: NSCalendarUnit { get } 

但我沒有得到相同的結果。這是我的垃圾代碼:

var date = NSDate() 
dateFormatter.dateFormat = "dd/YY" 
let calendar = NSCalendar.currentCalendar() 
let currentDateComponents = calendar.components(.CalendarUnitYear | .WeekCalendarUnit , fromDate: date) 
let startOfWeek = calendar.dateFromComponents(currentDateComponents) 
var dteString = dateFormatter.stringFromDate(startOfWeek!) 
// Output is "17/15" 

任何想法?

+0

'.WeekCalendarUnit'應該用'更換.CalendarUnitWeekOfYear' – milo526

+0

感謝您的回答@ milo526,但如果我這樣做,我的輸出是 「01/15」 .. – Jibeee

回答

11

您可以結合使用.CalendarUnitWeekOfYear.CalendarUnitYearForWeekOfYear,這應該給預期的結果:

let currentDateComponents = calendar.components(.CalendarUnitYearForWeekOfYear | .CalendarUnitWeekOfYear , fromDate: date) 
let startOfWeek = calendar.dateFromComponents(currentDateComponents) 

另外,使用rangeOfUnit()(我個人覺得更容易 使用):

var startOfWeek : NSDate? 
calendar.rangeOfUnit(.CalendarUnitWeekOfYear, startDate: &startOfWeek, interval: nil, forDate: date) 

斯威夫特2這必須改爲

let currentDateComponents = calendar.components([.YearForWeekOfYear, .WeekOfYear ], fromDate: date) 
let startOfWeek = calendar.dateFromComponents(currentDateComponents) 

var startOfWeek : NSDate? 
calendar.rangeOfUnit(.WeekOfYear, startDate: &startOfWeek, interval: nil, forDate: date) 
+0

完美的作品謝謝@Martin R! – Jibeee

+0

@ user3411356:不客氣! –

+0

@MartinR這個可以稍微修改一下,以便星期一作爲一週的第一天而不是星期天返回?此外,我需要獲得一週中的最後一天(星期日) – user2363025

相關問題