美文网首页
得到当前年、月、周的第一天和最后一天

得到当前年、月、周的第一天和最后一天

作者: 码农_会写诗 | 来源:发表于2017-12-22 14:19 被阅读0次

    常规获取当前时间等操作就不在赘述。这里分享下自己写的关于得到当前年、月、周的第一天和最后一天的方法。

    在.h文件里声明方法

    @interface ZYModel : NSObject

    +(ZYModel *)getInstance;

    /** * 得到这个月的第一天和最后一天 */

    - (NSArray*)getFirstAndLastDayOfMonth:(NSInteger)month inYear:(NSInteger)year;

    /** * 得到今年的第一天和最后一天 */

    - (NSArray*)getFirstAndLastDayOfYear:(NSInteger)year;

    @end

    在.m文件里实现

    static ZYModel* hudInstance = nil;

    @interface ZYModel()

    @property (nonatomic,strong) NSArray * jiduArr;

    @end

    @implementation ZYModel

    +(ZYModel *)getInstance{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    hudInstance = [[ZYModel alloc] init];

    });

    return hudInstance;

    }

    -(NSArray*)getFirstAndLastDayOfMonth:(NSInteger)month inYear:(NSInteger)year {

    NSArray * dateArr = [NSArray new];

    dateArr = [self getjidumonth:month];

    NSString * str1 = dateArr[0];

    NSString * str2 = dateArr[2];

    NSInteger firstteger = [str1 integerValue];

    NSInteger lastteger = [str2 integerValue];

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *date = [self getDateWithMonth:firstteger year:year];

    NSDate *datelast = [self getDateWithMonth:lastteger year:year];

    NSDate *firstDay;

    NSTimeInterval interval;

    [calendar rangeOfUnit:NSCalendarUnitMonth startDate:&firstDay interval:&interval forDate:date];

    NSDate *last_Day;

    NSTimeInterval interval_last;

    [calendar rangeOfUnit:NSCalendarUnitMonth startDate:&last_Day interval:&interval_last forDate:datelast];

    NSDateComponents *lastDateComponents = [calendar components:NSCalendarUnitMonth | NSCalendarUnitYear |NSCalendarUnitDay fromDate:last_Day];

    NSUInteger dayNumberOfMonth = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:datelast].length;

    NSInteger day = [lastDateComponents day];

    [lastDateComponents setDay:day + dayNumberOfMonth];

    lastDateComponents.nanosecond = lastDateComponents.nanosecond - 1000000;

    NSDate *lastDay = [calendar dateFromComponents:lastDateComponents];

    return [NSArray arrayWithObjects:firstDay,lastDay, nil];

    }

    -(NSArray*) getjidumonth:(NSInteger)month{

    NSArray * dateArr = [NSArray new];

    NSString * str = [NSString stringWithFormat:@"%ld",month];

    for (int i = 0; i<self.jiduArr.count; i++){

    NSArray * arr = self.jiduArr[i];

    for (int j= 0; j<arr.count;j++){

    if ([str isEqualToString:arr[j]]) {

    dateArr = arr;

    }

    }

    }

    return dateArr;

    }

    - (NSDate *)getDateWithMonth:(NSInteger)month year:(NSInteger)year {

    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];

    dateComponents.year = year;

    dateComponents.month = month;

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *date = [calendar dateFromComponents:dateComponents];

    return date;

    }

    + (NSArray*)getFirstAndLastDayOfYear:(NSInteger)year {

    NSDate *date = [self getDateWithYear:year];

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *firstDay;

    [calendar rangeOfUnit:NSCalendarUnitYear startDate:&firstDay interval:nil forDate:date];

    NSDateComponents *lastDateComponents = [calendar components:NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitDay fromDate:firstDay];

    NSUInteger dayNumberOfYear = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:date].length;

    NSInteger day = [lastDateComponents day];

    [lastDateComponents setDay:day + dayNumberOfYear];

    lastDateComponents.nanosecond = lastDateComponents.nanosecond - 1000000;

    NSDate *lastDay = [calendar dateFromComponents:lastDateComponents];

    return [NSArray arrayWithObjects:firstDay,lastDay, nil];

    }

    + (NSDate *)getDateWithYear:(NSInteger)year {

    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];

    dateComponents.year = year;

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *date = [calendar dateFromComponents:dateComponents];

    return date;

    }

    -(NSArray*)jiduArr{

    if (_jiduArr == nil) {

    _jiduArr = @[@[@"1",@"2",@"3"],

    @[@"4",@"5",@"6"],

    @[@"7",@"8",@"9"],

    @[@"10",@"11",@"12"]

    ];

    }

    return _jiduArr;

    }

    @end

    在要获取操作的地方 进行处理 eg:获取一个季度的开始日期和结束日期

    - (void)viewDidLoad {

    [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.

    NSArray* dateArray = [NSArray new];

    dateArray = [[ZYModel getInstance] getFirstAndLastDayOfMonth:10 inYear:2017];

    NSDate * date1 = [dateArray objectAtIndex:0];

    NSDate * date2 = [dateArray objectAtIndex:1];

    NSString * StrDate1 = [self getdateStr:date1];

    NSString * StrDate2 = [self getdateStr:date2];

    NSLog(@"dat1==%@  date2==%@",StrDate1,StrDate2);

    }

    -(NSString*)getdateStr:(NSDate*)date{

    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];//创建一个日期格式化器

    dateFormatter.dateFormat=@"yyyy-MM-dd ";//指定转date得日期格式化形式

    return [dateFormatter stringFromDate:date];//2015-11-20 08:24:04

    }

    相关文章

      网友评论

          本文标题:得到当前年、月、周的第一天和最后一天

          本文链接:https://www.haomeiwen.com/subject/xentgxtx.html