iphone - 如何获得一个月中的周数

标签 iphone ios objective-c ios5 ios6

这就是问题所在,我正在寻找一种方法来获取一个月中的周数。我已经找到了一个似乎适用于 ios 5 的解决方案,但它不适用于 io6(返回的数字不一样,在 ios 6 上又多了一个)。

- (int)weeksOfMonth:(int)month inYear:(int)year
{
    NSCalendar *cCalendar = [NSCalendar currentCalendar];

    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setMonth:month];
    [components setYear:year];

    NSRange range = [cCalendar rangeOfUnit:NSDayCalendarUnit
                               inUnit:NSMonthCalendarUnit
                              forDate:[cCalendar dateFromComponents:components]];

    cCalendar = [NSCalendar currentCalendar];
    [cCalendar setMinimumDaysInFirstWeek:4];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier:@"fr"]];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSMutableSet *weeks = [[NSMutableSet alloc] init ];

    for(int i = 0; i < range.length; i++)
    {
        NSString *temp = [NSString stringWithFormat:@"%4d-%2d-   %2d",year,month,range.location+i];
        NSDate *date = [dateFormatter dateFromString:temp ];
        int week = [[cCalendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear];
        [weeks addObject:[NSNumber numberWithInt:week]];
    }

    return [weeks count];
}

返回值在 io6 上是 6,在 io5 上是 5。

你有什么想法吗?

编辑:另一件事,我的设备 (ios5) 是法语的,而模拟器 (ios6) 是英语的。也许它可以改变一些东西(比如一周的第一天?)?

最佳答案

试试这个:

NSDate *date = [NSDate date];//since you are forming date, put it here
NSCalendar *calender = [NSCalendar currentCalendar];
NSRange weekRange = [calender rangeOfUnit:NSWeekCalendarUnit inUnit:NSMonthCalendarUnit forDate:date];
NSInteger weeksCount=weekRange.length;
NSLog(@"%d",weeksCount);

swift 4.0:

let date = Date()
let calendar = Calendar.current
let weekRange = calendar.range(of: .weekOfMonth, 
                               in: .month, 
                               for: date)
let weeksCount = weekRange.count ?? 0
print(weeksCount)

或者将您的方法更改为:

- (NSInteger)weeksOfMonth:(int)month inYear:(int)year{
    NSString *dateString=[NSString stringWithFormat:@"%4d/%d/1",year,month];

    NSDateFormatter *dfMMddyyyy=[NSDateFormatter new];
    [dfMMddyyyy setDateFormat:@"yyyy/MM/dd"];
    NSDate *date=[dfMMddyyyy dateFromString:dateString];

    NSCalendar *calender = [NSCalendar currentCalendar];
    NSRange weekRange = [calender rangeOfUnit:NSWeekCalendarUnit inUnit:NSMonthCalendarUnit forDate:date];
    NSInteger weeksCount=weekRange.length;

    return weeksCount;
}

编辑:

在上面的方法中使用它

 //NSCalendar *calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
 [calender setFirstWeekday:2]; //sunday=1, monday=2 etc

关于iphone - 如何获得一个月中的周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15243443/

相关文章:

iphone - 如何设置 iPod 音量而不影响其他音量?

iphone - 是否可以检查设备是否越狱?

ios - Xcode 10 不支持 Subversion **[SVN]**

ios - 在 objective-c 中从 uiwebview 生成 PDF 的问题

ios - Objective-C - 理解 View Controller

iphone - 如何将 `UIKeyInput`协议(protocol)与 `UIWebView`控制一起使用?

ios - 重置 iOS 应用程序的相机权限?

ios - 新的 iPhone 6 和 6 Plus 支持多少个同时多点触控?

ios - 改变 TableView 或 TableViewCell 的宽度

iphone - for循环中的UIButton翻转动画