这里写的是给一个日期计算出 这个日期所在的一周是几号到几号。吧日期换成今天日期也就是本周是几号到几号。考虑到有跨月,跨年等等的问题,直接就根据秒数来计算比较不会错。在者考虑到过内外的一周是不同的。国内周一是一周的第一天也就是一周是周一到周日,国外是周日的一周的第一天也就是周日到下周的周六。ide
#import "ViewController.h" @interface ViewController () { UITextField * _textField; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 2016.8.8 星期一 // 2016.8.9 星期二 // 2016.8.11 星期4 // 2016.8.14 星期日 UIButton * btn = [[UIButton alloc]initWithFrame:CGRectMake((self.view.frame.size.width-80)/2.0, 100, 80, 30)]; btn.backgroundColor = [UIColor orangeColor]; btn.tag = 1001; [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [btn setTitle:@"国内计算" forState:UIControlStateNormal]; [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; UIButton * btn2 = [[UIButton alloc]initWithFrame:CGRectMake((self.view.frame.size.width-80)/2.0, 140, 80, 30)]; btn2.backgroundColor = [UIColor orangeColor]; [btn2 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [btn2 setTitle:@"国外计算" forState:UIControlStateNormal]; btn2.tag = 1000; [btn2 addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn2]; _textField = [[UITextField alloc]initWithFrame:CGRectMake((self.view.frame.size.width-150)/2.0, CGRectGetMinY(btn.frame)-50, 150, 30)]; _textField.backgroundColor = [UIColor yellowColor]; [self.view addSubview:_textField]; } - (void)btnAction:(UIButton*)sender { if (sender.tag == 1000) { NSDictionary * dic = [ViewController weekfirstAndLastDay:_textField.text Formater:@"yyyy.MM.dd" Foreign:YES]; NSLog(@"%@",dic); }else{ NSDictionary * dic = [ViewController weekfirstAndLastDay:_textField.text Formater:@"yyyy.MM.dd" Foreign:NO]; NSLog(@"%@",dic); } } +(NSDictionary *)weekfirstAndLastDay:(NSString*)dateStr Formater:(NSString*)formater Foreign:(BOOL)foreign { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:formater]; NSDate * date =[formatter dateFromString:dateStr]; NSArray * foreginDateArr = @[@"星期日",@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六"]; NSArray * chineseDateArr = @[@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六",@"星期日"]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"YYYY.MM.dd"]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comp = [calendar components:kCFCalendarUnitYear|kCFCalendarUnitMonth|kCFCalendarUnitDay|kCFCalendarUnitWeekday|kCFCalendarUnitDay fromDate:date]; NSInteger foreginWeekDay = [comp weekday]; NSString * foreginDateStr = foreginDateArr[foreginWeekDay-1]; NSInteger chineseWeekDay = 0; if (foreign) { chineseWeekDay = foreginWeekDay; }else{ for (int i = 0; i < foreginDateArr.count; i++) { if ([foreginDateStr isEqualToString:chineseDateArr[i]]) { chineseWeekDay = i+1; break; } } } NSInteger gapDate = 7- chineseWeekDay; //把时间转化成秒 NSTimeInterval dateStamp = [date timeIntervalSince1970]; //把秒转化成时间 NSTimeInterval beginStamp = dateStamp - 24*60*60*(chineseWeekDay-1); NSTimeInterval endStamp = dateStamp + 24*60*60*gapDate; NSDate * begin = [NSDate dateWithTimeIntervalSince1970:beginStamp]; NSDate * end = [NSDate dateWithTimeIntervalSince1970:endStamp]; NSString * beginStr = [dateFormatter stringFromDate:begin]; NSString * endStr = [dateFormatter stringFromDate:end]; NSDictionary * dic = @{@"begin":beginStr, @"end":endStr, @"now":dateStr}; return dic; }
思路就是算出这个日期是属于一周的第几天,而后在相应的减去秒数,加上秒数算出一周是从几号到几号。code
分别计算了国内外component