我已将此类别添加到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天.
我怎么解决这个问题?
Dav*_*ong 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!");
}
这是假设一周的第一天和最后一天包含"周末"(对于公历是正确的.在其他日历中可能不是这样).
在Swift 3+中:
extension Date {
  var isWeekend: Bool {
    return NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!.isDateInWeekend(self)
  }
}
在Swift中:
func isWeekend(date: NSDate) -> Bool {
    let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    return calendar.isDateInWeekend(date)
}
| 归档时间: | 
 | 
| 查看次数: | 5909 次 | 
| 最近记录: |