年月周日

NSCalendar 功能很強(qiáng)大,多次調(diào)用時(shí)需要考慮性能問題,但必要的使用會(huì)在日期計(jì)算時(shí)事半功倍。

計(jì)算周次所在日期范圍
-(NSString*)timeConversionYear:(NSInteger)year WeakOfYear:(NSInteger)weekofYear
{
    //周次的范圍日期  幾月幾日 - 幾月幾日
    NSString *weekDate = @"";
    //時(shí)間軸 取每一年的六月一號(hào) 沒有特別的含義
    NSString *timeAxis = [NSString stringWithFormat:@"%ld-06-01 12:00:00",(long)year];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    //獲得了時(shí)間軸
    NSDate *date = [dateFormatter dateFromString:timeAxis];
    
    //日歷類 提供大部分的時(shí)間計(jì)算接口
    NSCalendar *calendar = [NSCalendar currentCalendar];
    /**這兩個(gè)參數(shù)的設(shè)置影響著周次的個(gè)數(shù)和劃分*****************/
    [calendar setFirstWeekday:2]; //設(shè)置每周的開始是星期一
    [calendar setMinimumDaysInFirstWeek:7]; //設(shè)置一周至少需要幾天
    /****************/
    //一個(gè)封裝了具體年月日、時(shí)秒分、周、季度等的類
    NSDateComponents *comps = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay)
                                          fromDate:date];
    
    //時(shí)間軸是當(dāng)前年的第幾周
    NSInteger todayIsWeek = [comps weekOfYear];
    //第幾周的字符串格式
    //NSString *todayIsWeekStr = [NSString stringWithFormat:@"%ld",(long)todayIsWeek];
    
    //獲取時(shí)間軸是星期幾 1(星期天) 2(星期一) 3(星期二) 4(星期三) 5(星期四) 6(星期五) 7(星期六)
    NSInteger todayIsWeekDay = [comps weekday];
    
    //得到時(shí)間軸是幾號(hào)
    // NSInteger todayIsDay = [comps day];
    // 計(jì)算當(dāng)前日期和這周的星期一和星期天差的天數(shù)
    //firstDiff 星期一相差天數(shù) 、 lastDiff 星期天相差天數(shù)
    long firstDiff,lastDiff;
    if (todayIsWeekDay == 1) {
        firstDiff = -6;
        lastDiff = 0;
    }else
    {
        firstDiff = [calendar firstWeekday] - todayIsWeekDay;
        lastDiff = 8 - todayIsWeekDay;
    }
    
    NSDate *firstDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*firstDiff sinceDate:date];
    NSDate *lastDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*lastDiff sinceDate:date];
    
    long weekdifference = weekofYear - todayIsWeek;
    
    firstDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*7*weekdifference sinceDate:firstDayOfWeek];
    lastDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*7*weekdifference sinceDate:lastDayOfWeek];
    // NSLog(@"星期一的日期 %@",[dateFormatter stringFromDate:firstDayOfWeek]);
    // NSLog(@"星期天的日期 %@",[dateFormatter stringFromDate:lastDayOfWeek]);
    
    NSDateComponents *firstDayOfWeekcomps = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay)
                                                        fromDate:firstDayOfWeek];
    NSDateComponents *lastDayOfWeekcomps = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay)
                                                       fromDate:lastDayOfWeek];
    
    NSInteger startMonth = [firstDayOfWeekcomps month];
    NSInteger startDay = [firstDayOfWeekcomps day];
    
    NSInteger endmonth = [lastDayOfWeekcomps month];
    NSInteger endday = [lastDayOfWeekcomps day];
    weekDate = [NSString stringWithFormat:@"%ld.%ld.%ld-%ld.%ld.%ld",year,(long)startMonth,(long)startDay,year,(long)endmonth,(long)endday];
    return weekDate;
}
計(jì)算年有多少周
+(NSInteger)weeksInOneYear:(NSInteger)year
{
    NSString *timeAxis = [NSString stringWithFormat:@"%ld-12-31 12:00:00",(long)year];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    //獲得了時(shí)間軸
    NSDate *date = [dateFormatter dateFromString:timeAxis];
    //日歷類 提供大部分的時(shí)間計(jì)算接口
    NSCalendar *calendar = [NSCalendar currentCalendar];
    [calendar setFirstWeekday:2];
    [calendar setMinimumDaysInFirstWeek:7];
    
    //    NSRange range = [calendar rangeOfUnit:NSCalendarUnitWeekOfYear inUnit:NSCalendarUnitYear forDate:date];
    NSInteger length = [calendar ordinalityOfUnit:NSCalendarUnitWeekOfYear inUnit:NSCalendarUnitYear forDate:date];
    return length;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 我要走出內(nèi)營(yíng)業(yè)廳時(shí),凡姐說:“我今晚一定打電話給鵬!” 我除了笑還是笑,只怕我調(diào)走前,這通電話還是沒打成功,其實(shí)我...
    素素_sky閱讀 252評(píng)論 0 0
  • 【幸福少年鄂佳云飛鄭州小學(xué)生堅(jiān)持原創(chuàng)分享第140天2018.1.15】 今氣本上九霄頭,心有仇,后想去天由。不諳明...
    大同行者閱讀 147評(píng)論 0 0
  • 夠真實(shí)夠濃烈,那才過癮,才叫個(gè)藝術(shù)![悠閑][悠閑][悠閑] 清唱才高下立見!亂七八糟的背景樂,那不如搖滾轟炸的過...
    縱情嬉戲天地間閱讀 186評(píng)論 0 0
  • 一切步入正軌中
    李李李三歲閱讀 192評(píng)論 0 0

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