获取所选月份的天数列表

时间:2014-01-16 12:55:53

标签: ios iphone nsdate

我想获得所选月份的日期列表。 例如,如果用户选择feb,则显示1到28 0r 29天。我怎么能这样做?

由于

4 个答案:

答案 0 :(得分:2)

您可以尝试以下代码,我已经在今天的日期找到了本月的日期列表。您可以提供其他日期来查找给定月份的列表。

NSDate *today = [NSDate date];
NSCalendar *cal = [NSCalendar currentCalendar];

NSMutableArray *datesThisMonth = [NSMutableArray array];
NSRange rangeOfDaysThisMonth = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:today];

NSDateComponents *components = [cal components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSEraCalendarUnit) fromDate:today];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];

for (NSInteger i = rangeOfDaysThisMonth.location; i < NSMaxRange(rangeOfDaysThisMonth); ++i) {
    [components setDay:i];
    NSDate *dayInMonth = [cal dateFromComponents:components];
    [datesThisMonth addObject:dayInMonth];
}
NSLog(@"datesThisMonth: %@", datesThisMonth);

答案 1 :(得分:0)

您可以检索指定月份的天数

NSCalendar* cal = [NSCalendar currentCalendar];
NSDateComponents* comps = [[NSDateComponents alloc] init];

// Set month here
[comps setMonth:2]; // 2 = February

NSRange range = [cal rangeOfUnit:NSDayCalendarUnit
                          inUnit:NSMonthCalendarUnit
                         forDate:[cal dateFromComponents:comps]];

NSLog(@"current day count in this month: %lu", (unsigned long)range.length);

答案 2 :(得分:0)

我有一个开源日历活动项目。如果你需要什么,也许可以查看一下。 DPCalendar

我已将其简化为

- (NSInterger) numberOfDaysForMonth:(NSDate *)date {
    NSCalendar  *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate: date];
    [components setDay:1];
    //Get the first day of the month
    NSDate *firstDay = [calendar dateFromComponents:components];

    [components setDay:0];
    [components setMonth:components.month + 1];
    //Get the last day of the month
    NSDate *lastDay = [calendar dateFromComponents:components];

    components = [self.calendar components:NSDayCalendarUnit fromDate:firstDay toDate:lastDay options:0];
    return components.day + 1;
}

干杯

答案 3 :(得分:0)

一般来说,我们只需要根据年份来处理2月,这是我实施的方法:

+ (NSUInteger)numberOfDaysForYear:(NSInteger)year
                            month:(NSInteger)month
{
  if (2 == month) {
    NSCalendar * gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents * dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setYear:year];
    [dateComponents setMonth:month];
    [dateComponents setDay:1];
    NSDate * firstDayDate = [gregorianCalendar dateFromComponents:dateComponents];
    NSRange days = [gregorianCalendar rangeOfUnit:NSCalendarUnitDay
                                           inUnit:NSCalendarUnitMonth
                                          forDate:firstDayDate];
    return days.length;
  } else if (4 == month || 6 == month || 9 == month || 11 == month) {
    return 30;
  } else {
    return 31;
  }
}