我已将此类别添加到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天。
我该如何解决这个问题?
答案 0 :(得分:23)
您想使用NSCalendar
和NSDateComponents
:
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 :(得分:14)
从iOS 8开始,您可以在isDateOnWeekend:
上使用NSCalendar
。
答案 2 :(得分:5)
在斯威夫特:
func isWeekend(date: NSDate) -> Bool {
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
return calendar.isDateInWeekend(date)
}