Обнаружение, если NSDate содержит выходной день - PullRequest
15 голосов
/ 25 марта 2011

У меня есть эта категория, добавленная в 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.

Как я могу решить эту проблему?

Ответы [ 4 ]

23 голосов
/ 25 марта 2011

Вы хотите использовать 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!");
}

Это работает в предположении, что первый и последний дни недели составляют «выходные дни» (что верно длягригорианский календарь. Возможно, это не так в других календарях).

14 голосов
/ 25 апреля 2016

Начиная с iOS 8, вы можете использовать isDateOnWeekend: на NSCalendar.

6 голосов
/ 12 мая 2017

In Swift 3 + :

extension Date {
  var isWeekend: Bool {
    return NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!.isDateInWeekend(self)
  }
}
5 голосов
/ 03 июня 2016

В Свифт:

func isWeekend(date: NSDate) -> Bool {
    let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    return calendar.isDateInWeekend(date)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...