检测NSDate是否包含周末

时间:2011-03-24 22:01:36

标签: objective-c

我已将此类别添加到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天。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分: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 :(得分:14)

从iOS 8开始,您可以在isDateOnWeekend:上使用NSCalendar

答案 2 :(得分:5)

在斯威夫特:

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