計算一年中所有周的第一天和最后一天

準備

在看代碼之前你可能需要先了解以下知識

代碼


  - (void)weeksWithDateComponents:(NSDateComponents *)fromComp
              toDateComponents:(NSDateComponents *)toComp{
    //獲取公歷日歷
    NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    //一年中的天數(shù)或一年已過的天數(shù)
    NSInteger daysOfYear = 0;
    if (toComp) {//計算已過的天數(shù)
        daysOfYear = [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[calendar dateFromComponents:toComp]];
    }else{//計算一年的天數(shù)
//        daysOfYear = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[calendar dateFromComponents:fromComp]].length;//在9.3系統(tǒng)里始終是31天
        /*fixed 9.3 bug*/
        for (NSInteger i = 1; i <= 12; i++) {
            fromComp.month = i;
            fromComp.day = 1;
            NSDate *date = [calendar dateFromComponents:fromComp];
            daysOfYear += [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date].length;
        }
    }
    //月份移動至1月
    fromComp.month = 1;
    //記錄當前第幾周
    NSInteger weekOfYear = 0;
    //遍歷每一天
    for (NSInteger i = 1; i <= daysOfYear; i++) {
        @autoreleasepool {
            //移至當前天
            fromComp.day = i;
            NSDate *idate = [calendar dateFromComponents:fromComp];
            NSDateComponents *comp = [calendar components:kCFCalendarUnitDay|kCFCalendarUnitWeekday|kCFCalendarUnitMonth fromDate:idate];
            //星期一開始算周
            if (comp.weekday == 2) {
                weekOfYear += 1;
                fromComp.day = MIN(i+6,daysOfYear);
                NSDate *fdate = [calendar dateFromComponents:fromComp];
                NSString *reslut = [NSString stringWithFormat:@"第%zd周 (%zd月%zd日-%zd月%zd日)",weekOfYear,
                                    [calendar ordinalityOfUnit:NSCalendarUnitMonth inUnit:NSCalendarUnitYear forDate:fdate],
                                    [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:fdate],
                                    [calendar ordinalityOfUnit:NSCalendarUnitMonth inUnit:NSCalendarUnitYear forDate:idate],
                                    [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:idate]];
                NSLog(@"%@",reslut);
            }
        }
    }
}

使用

    NSDateComponents * fComp = [[NSCalendar currentCalendar] components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:[NSDate date]];
    fComp.month = 1;
    fComp.day = 1;
    NSDateComponents * tComp = [[NSCalendar currentCalendar] components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:[NSDate date]];
    [self weeksWithDateComponents:fComp toDateComponents:tComp];
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容