iOS:獲取一周7天的日期(年-月-日-星期)


一、介紹

在開發中,日期的使用絕對是離不了的,跟業務的關聯性太強了,例如課程表。有的時候我們不需要課程表,但是需要獲取一周7天的日期,這一周內的日期,我覺得有兩種理解:

1、獲取當天開始的一周日期,當天作為起點往后順延的一周(紅色的為當天),實現方法見如下代碼:方式一:

2、獲取一周內的日期,當天在這一周內,所在一周的第一天和最后一天, 不是作為起點往后順延(紅色的為當天),實現方法見如下代碼:方式二:

 

二、代碼(放在單例工具類HYWeekCalendarUitility實現)

1、工具類聲明和實現

@interface HYWeekCalendarUitility : NSObject
@property (nonatomic, strong) NSArray  *weeks;
@property (nonatomic,   copy) NSString *firstDayDeteOfWeek;
@property (nonatomic,   copy) NSString *nowDayDeteOfWeek;
@property (nonatomic,   copy) NSString *lastDayDeteOfWeek;
+ (instancetype)shareInstance;
@end
+ (instancetype)shareInstance {
    static HYWeekCalendarUitility *weekCalendarUitility = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        weekCalendarUitility = [[HYWeekCalendarUitility alloc] init];
        //[weekCalendarUitility getDateWeeksDuraingToday];
        [weekCalendarUitility getDateWeeksFromToday];
    });
    return weekCalendarUitility;
}
-(NSString *)transWeekName:(NSString *)orrignWeekName
{
    NSString *targetWeekName = @"";
    
    //轉換文案
    if ([orrignWeekName isEqualToString:@"星期日"]) {
        targetWeekName = @"周日";
    }
    else if ([orrignWeekName isEqualToString:@"星期一"]) {
        targetWeekName = @"周一";
    }
    else if ([orrignWeekName isEqualToString:@"星期二"]) {
        targetWeekName = @"周二";
    }
    else if ([orrignWeekName isEqualToString:@"星期三"]) {
        targetWeekName = @"周三";
    }
    else if ([orrignWeekName isEqualToString:@"星期四"]) {
        targetWeekName = @"周四";
    }
    else if ([orrignWeekName isEqualToString:@"星期五"]) {
        targetWeekName = @"周五";
    }else{
        targetWeekName = @"周六";
    }
    
    return targetWeekName;
}

2、方法實現

---方式一---

/**
 *  模式一
 *  獲取當前時間開始的一周日期
 *  注意:當天作為起點往后順延的一周
 */
-(void)getDateWeeksFromToday{
    
    //日歷格式
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateFormatter *formater = [[NSDateFormatter alloc] init];
    [formater setDateFormat:@"yyyy-MM-dd"];
    
    NSMutableArray *dateWeeks = [NSMutableArray array];
    for (int i=0; i<7; i++) {
        //這一天
        NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday fromDate:[NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24 * i]];
        NSDate *date = [calendar dateFromComponents:components];
        
        //年月日
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSString *dateString = [dateFormatter stringFromDate:date];//幾月幾號
        
        //星期
        NSDateFormatter *weekFormatter = [[NSDateFormatter alloc] init];
        [weekFormatter setDateFormat:@"EEEE"];
        NSString *weekString = [self transWeekName:[weekFormatter stringFromDate:date]];//周幾
        
        NSString *date_weekStr = [NSString stringWithFormat:@"%@-%@",dateString,weekString];
        [dateWeeks addObject:date_weekStr];
        
        //賦值
        if (i==0) {
            self.firstDayDeteOfWeek = [formater stringFromDate:date];
            self.nowDayDeteOfWeek = [formater stringFromDate:date];
        }else if (i==6) {
            self.lastDayDeteOfWeek = [formater stringFromDate:date];
        }
    }
    
    self.weeks = dateWeeks;
    NSLog(@"----dateWeeks:%@------",dateWeeks);
}

---方式二---

/**
 *  模式二
 *  獲取當前時間所在一周的第一天和最后一天, 也即一周的日期
 *  注意:當天在這一周內,不是作為起點往后順延
 */
- (void)getDateWeeksDuraingToday
{
    //日歷格式
    NSDate *now = [NSDate date];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday
                                         fromDate:now];
    // 得到:今天是星期幾
    // 1(星期天) 2(星期二) 3(星期三) 4(星期四) 5(星期五) 6(星期六) 7(星期天)
    NSInteger weekDay = [comp weekday];
    // 得到:今天是幾號
    NSInteger day = [comp day];
    
    NSLog(@"weekDay:%ld  day:%ld",weekDay,day);
    
    // 計算當前日期和這周的星期一和星期天差的天數
    long firstDiff,lastDiff;
    if (weekDay == 1) {
        firstDiff = 1;
        lastDiff = 0;
    }else{
        firstDiff = [calendar firstWeekday] - weekDay;
        lastDiff = 7 - weekDay;
    }
    NSLog(@"firstDiff:%ld   lastDiff:%ld",firstDiff,lastDiff);
    
    // 一周日期
    NSArray *dateWeeks = [self getCurrentWeeksWithFirstDiff:firstDiff lastDiff:lastDiff];
    
    // 在當前日期(去掉了時分秒)基礎上加上差的天數
    NSDateComponents *firstDayComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
    [firstDayComp setDay:day + firstDiff];
    NSDate *firstDayOfWeek= [calendar dateFromComponents:firstDayComp];
    
    NSDateComponents *lastDayComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
    [lastDayComp setDay:day + lastDiff];
    NSDate *lastDayOfWeek= [calendar dateFromComponents:lastDayComp];
    
    NSDateFormatter *formater = [[NSDateFormatter alloc] init];
    [formater setDateFormat:@"yyyy-MM-dd"];
    NSLog(@"一周開始 %@",[formater stringFromDate:firstDayOfWeek]);
    NSLog(@"當前 %@",[formater stringFromDate:now]);
    NSLog(@"一周結束 %@",[formater stringFromDate:lastDayOfWeek]);
    
    NSLog(@"%@",dateWeeks);
    
    self.firstDayDeteOfWeek = [formater stringFromDate:firstDayOfWeek];
    self.nowDayDeteOfWeek = [formater stringFromDate:now];
    self.lastDayDeteOfWeek = [formater stringFromDate:lastDayOfWeek];
    self.weeks = dateWeeks;
}

//獲取一周時間 數組
- (NSMutableArray *)getCurrentWeeksWithFirstDiff:(NSInteger)first lastDiff:(NSInteger)last{
    
    NSMutableArray *eightArr = [[NSMutableArray alloc] init];
    for (NSInteger i = first; i < last + 1; i ++) {
        //從現在開始的24小時
        NSTimeInterval secondsPerDay = i * 24*60*60;
        NSDate *curDate = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];                NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSString *dateStr = [dateFormatter stringFromDate:curDate];//幾月幾號
        //NSString *dateStr = @"5月31日";
        NSDateFormatter *weekFormatter = [[NSDateFormatter alloc] init];
        [weekFormatter setDateFormat:@"EEEE"];//星期幾 @"HH:mm 'on' EEEE MMMM d"];
        NSString *weekStr = [weekFormatter stringFromDate:curDate];
        
        //轉換文案
        weekStr = [self transWeekName:weekStr];
        
        //組合時間
        NSString *strTime = [NSString stringWithFormat:@"%@-%@",dateStr,weekStr];
        [eightArr addObject:strTime];
        
    }
    return eightArr;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM