得到一个月或是一个星期的最后一天 得到一个月或一个星期的第一天

本文介绍了一个Swift语言中处理日期的方法,包括获取指定单位下(如月份或星期)的起始和结束日期,以及生成该单位内所有日期的数组。通过使用NSCalendar和NSDateFormatter等API,实现了日期的灵活操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//////////////////

NSCalendarUnit  传入NSWeekOfMonthCalendarUnit    代表星期

          传入NSMonthCalendarUnit              代表月

 

//得到一个月或是一个星期的最后一天

+(NSDate *)getLastDateWithCalendarUnit:(NSCalendarUnit)unit withDate:(NSDate *)fromDate

{

    NSDate *beginOfMonth = nil;

    NSTimeInterval endDate;

    NSCalendar *calendar = [NSCalendarcurrentCalendar];

   //说明以星期一作为这星期的第一天。若传入1,则代表以星期天作为这星期的第一天

    [calendar setFirstWeekday:2];

    BOOL success = [calendar rangeOfUnit:unit startDate:&beginOfMonth interval:&endDate forDate:fromDate];

   

    if (!success){

        NSLog(@"Error:failed to get day.");

    }

    //将NSTimeInterval转为int的类型。

    int day = ((int)endDate)/(3600*24);

    //将日期解析到NSDateComponent对象中去。

    NSDateComponents *monthComponent = [calendar components:NSMonthCalendarUnitfromDate:fromDate];

    NSDateComponents *component = [[NSDateComponentsalloc]init];

    [component setDay:day];

    [component setMonth:[monthComponent month]];

    //这段代码是从NSDateComponent获得NSDate。下面得到的是一个月的最后一天。

    NSDate *lastDate = [calendar dateFromComponents:component];

    return lastDate;

}

 

//得到一个月或一个星期的第一天

+ (NSDate *)getFirstDateWithCalendarUnit:(NSCalendarUnit)unit withDate:(NSDate *)fromDate

{

    NSDate *beginOfMonth = nil;

    NSTimeInterval endDate;

    NSCalendar *calendar = [NSCalendarcurrentCalendar];

    [calendar setFirstWeekday:2];

    BOOL success = [calendar rangeOfUnit:unit startDate:&beginOfMonth interval:&endDate forDate:fromDate];

    

    if (success){

        return beginOfMonth;

    }else{

        return nil;

    }

}

 

//得到本月或是本周的日期数组,返回的数组为这个月或是这星期截止到今天的所有日期

+ (NSMutableArray *)getArrayWithCalendarUnit:(NSCalendarUnit)unit withDate:(NSDate *)withDate

{

    NSTimeInterval secondsPerDay = 24 * 60 * 60;

    NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init];

    [dateFormatter setDateFormat:@"yyyy-MM-dd"];

    NSString *todayStr = [dateFormatter stringFromDate:withDate];

    

    NSDate *beginningOfMonth = nil;

    NSCalendar *calendar = [NSCalendarcurrentCalendar];

    [calendar setFirstWeekday:2];

    BOOL ok = [calendar rangeOfUnit:unit startDate:&beginningOfMonth interval:NULL forDate:withDate];

    if (ok) {

        NSLog(@"beginningOfMonth = %@", beginningOfMonth);

        NSMutableArray *dateArray = [NSMutableArray new];

        for (int i = 0; i < 30; i ++) {

    //dateString为这个月或是星期的第一天

            NSString *dateString = [dateFormatter stringFromDate:beginningOfMonth];

            if ([dateString isEqualToString:todayStr]) {

                [dateArray addObject:todayStr];

                return dateArray;

            }else{

                [dateArray addObject:dateString];

                NSDate *nextDay = [beginningOfMonth dateByAddingTimeInterval:secondsPerDay];

                beginningOfMonth = nextDay;

            }

        }

    }

    returnNil;

}

转载于:https://www.cnblogs.com/wudan7/p/3687341.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值