说明 | 日期 |
---|---|
首次发布 | 2016年12月23日 |
最近更新 | 2020年07月08日 |
struct WeekDate {
NSString *start;
NSString *end;
};
typedef struct WeekDate WeekDate;
CG_INLINE WeekDate
WeekDateMake(NSString *start, NSString *end) {
WeekDate p; p.start = start; p.end = end; return p;
}
@interface ViewController
@property (nonatomic, strong) NSCalendar *calendar;
@property (nonatomic, strong) NSDateFormatter *dateFormatter;
@end
@implement ViewController
///根据传入的日期,找到该日期对应本周周日和周六的日期: `起点为周日,终点为周六`
- (WeekDate)getWeekStartEndDateFrom:(NSDate *)date {
NSDateComponents *components = [self.calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday fromDate:date];
//周几
NSInteger weekDay = components.weekday;
//几号
NSInteger day = components.day;
NSInteger startDiff, endDiff;
if (weekDay == 1) {
startDiff = -6;
endDiff = 0;
} else {
startDiff = self.calendar.firstWeekday - weekDay;
endDiff = 7 - weekDay;
}
components.day = day + startDiff;
NSDate *startDate = [self.calendar dateFromComponents:components];
components.day = day + endDiff;
NSDate *endDate = [self.calendar dateFromComponents:components];
return WeekDateMake([self.dateFormatter stringFromDate:startDate], [self.dateFormatter stringFromDate:endDate]);
}
- (NSCalendar *)calendar {
if (!_calendar) {
_calendar = [NSCalendar currentCalendar];
}
return _calendar;
}
- (NSDateFormatter *)dateFormatter {
if (!_dateFormatter) {
_dateFormatter = [[NSDateFormatter alloc] init];
_dateFormatter.dateFormat = @"yyyy-MM-dd";
}
return _dateFormatter;
}
@end
测试
WeekDate curDate = [self getWeekStartEndDateFrom:[NSDate date]];
WeekDate lastDate = [self getWeekStartEndDateFrom:[[NSDate date] dateByAddingTimeInterval:-5*24*3600]];
NSLog(@" curDate=%@--%@", curDate.start, curDate.end);
NSLog(@"lastDate=%@--%@", lastDate.start, lastDate.end);
输出:
curDate=2020-07-05--2020-07-11
lastDate=2020-06-28--2020-07-04
开发时的截图