2011-03-24 43 views
13
週末一天

我有此類別添加到NSDate的:檢測是否含有的NSDate一個

- (bool)isWeekend 
{ 
    NSString* s = [self asString:@"e"]; 

    if ([s isEqual:@"6"]) 
    return YES; 
    else if ([s isEqual:@"7"]) 
    return YES; 
    else 
    return NO; 
} 

輔助功能:

- (NSString*)asString:(NSString*)format 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:format]; 
    NSString *formattedDateString = [dateFormatter stringFromDate:self]; 
    [dateFormatter release]; 

    return formattedDateString; 
} 

isWeekend應該返回YES如果是週六或週日。但是,如果該區域有一個星期天一週開始,在這種情況下,週五爲6天,週六將是第7天。

我怎樣才能解決這個問題它不工作?

+1

它是安全的假設, 'asString:' 與指定的日期格式創建一個NSDateFormatter,然後運行的NSDate通過它? – Tommy 2011-03-24 22:10:19

回答

23

你想用NSCalendarNSDateComponents

NSDate *aDate = [NSDate date]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSRange weekdayRange = [calendar maximumRangeOfUnit:NSWeekdayCalendarUnit]; 
NSDateComponents *components = [calendar components:NSWeekdayCalendarUnit fromDate:aDate]; 
NSUInteger weekdayOfDate = [components weekday]; 

if (weekdayOfDate == weekdayRange.location || weekdayOfDate == weekdayRange.length) { 
    //the date falls somewhere on the first or last days of the week 
    NSLog(@"weekend!"); 
} 

這是假設一週的第一天和最後一天包括「周端」(這是公曆真正下運行它在其他日曆中可能不是這樣)。

+1

我沒有想到這個解決方案的工作。但它確實如此。 :-)週日開始的週一以及週一開始的週日。我必須承認我不瞭解maximumRangeOfUnit :. – Kobski 2011-03-24 22:51:30

+1

@Kobski'maximumRangeOfUnit:'基本上是要得到一週內有多少天。 – 2011-03-24 22:55:55

+0

@ dave-delong感謝您花時間澄清這一點,但是不會總是7?我添加了一些調試代碼,以查看值和我嘗試過的語言環境,位置爲1,長度爲7.但爲什麼weekdayOfDate應該是1或7,因爲它是週末? – Kobski 2011-03-24 23:51:12

11

由於iOS 8的,你可以在NSCalendar使用isDateOnWeekend:

4

在斯威夫特:

func isWeekend(date: NSDate) -> Bool { 
    let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    return calendar.isDateInWeekend(date) 
} 
5

斯威夫特3+

extension Date { 
    var isWeekend: Bool { 
    return NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!.isDateInWeekend(self) 
    } 
} 
+1

耶!對於迅捷vs objc ... – Yohst 2017-06-16 15:56:43

+0

@Yohst哈,是的! Swift可以很簡潔:) – 2017-06-16 16:01:48

相關問題