iOS 时间对比,判断几分钟前、几小时前、昨天、本周几

这个博客介绍了一个iOS方法,用于将输入的时间字符串与当前时间对比,以输出‘几分钟前’、‘几小时前’、‘昨天’或‘本周几’等描述。它涉及NSDate的使用,包括时间戳计算、日期转换以及判断是否为昨天和本周的逻辑。

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

/*

 * 需要传入的时间格式 2017-06-14 14:18:54

 */


// 和当前时间进行比较  输出字符串为(刚刚几个小时前 几天前 )

+(NSString *)inputTimeStr:(NSString *)timeStr

{

    NSDate *nowDate = [NSDate date];

    NSDate *sinceDate = [self becomeDateStr:timeStr];

    int i  = [nowDate timeIntervalSinceDate:sinceDate];

    

    NSString  *str  = @"";

    

    if (i <= 60)

    {//小于60s

        str = @"刚刚";

    }else if(i>60 && i<=3600)

    {//大于60s,小于一小时

        str = [NSString stringWithFormat:@"%d分钟前",i/60];

    }else if (i>3600 && i<60*60*24)

    {//

        if ([self isYesterdayWithDate:sinceDate])

        {//24小时内可能是昨天

            str = [NSString stringWithFormat:@"昨天"];

        }else

        {//今天

            str = [NSString stringWithFormat:@"%d小时前",i/3600];

        }

    }else

    {//

        int k = i/(3600*24);

        if ([self isYesterdayWithDate:sinceDate])

        {//大于24小时也可能是昨天

            str = [NSString stringWithFormat:@"昨天"];

        }else

        {

            //在这里大于1天的我们可以以周几的形式显示

            if (k>=1)

            {

                if (k < [self getNowDateWeek])

                {//本周

                    str  = [self weekdayStringFromDate:[self becomeDateStr:timeStr]];

                }else 

                {//不是本周

//                    str  = [NSString stringWithFormat:@"不是本周%@",[self weekdayStringFromDate:[self becomeDateStr:timeStr]]];

                    str  = timeStr;

                }

            }else

            {//

                str = [NSString stringWithFormat:@"%d天前",i/(3600*24)];

            }

        }

    }

    return str;

}

//把时间字符串转换成NSDate

+ (NSDate *)becomeDateStr:(NSString *)dateStr

{

    NSDateFormatter *formatter2 = [[NSDateFormatter alloc]init];

    [formatter2 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSDate *date1 = [formatter2 dateFromString:dateStr];

    return date1;

}

//把时间转换成星期

+ (NSString*)weekdayStringFromDate:(NSDate*)inputDate {

    

    NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"周日", @"周一", @"周二", @"周三", @"周四", @"周五", @"周六", nil];

    

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    

    //    NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];

    NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"zh-Hans"];

    

    [calendar setTimeZone: timeZone];

    

    NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;

    

    NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];

    

    return [weekdays objectAtIndex:theComponents.weekday];

}

//判断是否为昨天

+ (BOOL)isYesterdayWithDate:(NSDate *)newDate

{

    BOOL isYesterday = YES;

    NSTimeInterval secondsPerDay = 24 * 60 * 60;

    //

    NSDate *yearsterDay =  [[NSDate alloc] initWithTimeIntervalSinceNow:-secondsPerDay];

    /** 前天判断

     //    NSDate *qianToday =  [[NSDate alloc] initWithTimeIntervalSinceNow:-2*secondsPerDay];

     //    NSDateComponents* comp3 = [calendar components:unitFlags fromDate:qianToday];

     //    if (comp1.year == comp3.year && comp1.month == comp3.month && comp1.day == comp3.day)

     //    {

     //        dateContent = @"前天";

     //    }

     **/

    NSCalendar* calendar = [NSCalendar currentCalendar];

    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonthNSCalendarUnitDay;

    //    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;

    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:newDate];

    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:yearsterDay];

    

    if ( comp1.year == comp2.year && comp1.month == comp2.month && comp1.day == comp2.day)

    {

        isYesterday = YES;

    }else

    {

        isYesterday = NO;

    }

    return isYesterday;

}

//判断今天是本周的第几天

+ (int)getNowDateWeek

{

    NSDate *nowDate = [NSDate date];

    NSString *nowWeekStr = [self weekdayStringFromDate:nowDate];

    int  factWeekDay = 0;

    

    if ([nowWeekStr isEqualToString:@"周日"])

    {

        factWeekDay = 7;

    }else if ([nowWeekStr isEqualToString:@"周一"])

    {

        factWeekDay = 1;

    }else if ([nowWeekStr isEqualToString:@"周二"])

    {

        factWeekDay = 2;

    }else if ([nowWeekStr isEqualToString:@"周三"])

    {

        factWeekDay = 3;

    }else if ([nowWeekStr isEqualToString:@"周四"])

    {

        factWeekDay = 4;

    }else if ([nowWeekStr isEqualToString:@"周五"])

    {

        factWeekDay = 5;

    }else if ([nowWeekStr isEqualToString:@"周六"])

    {

        factWeekDay = 6;

    }

    return  factWeekDay;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值