1. 程式人生 > >iOS 時間對比,判斷幾分鐘前、幾小時前、昨天、本週幾

iOS 時間對比,判斷幾分鐘前、幾小時前、昨天、本週幾

/*

 * 需要傳入的時間格式 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 = [NSStringstringWithFormat:@"%d分鐘前",i/60];

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

    {//

        if ([self isYesterdayWithDate:sinceDate])

        {//24小時內可能是昨天

            str = [NSStringstringWithFormat:@"昨天"];

        }else

        {//今天

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

        }

    }else

    {//

        int k = i/(3600*24);

        if ([self isYesterdayWithDate:sinceDate])

        {//大於24小時也可能是昨天

            str = [NSStringstringWithFormat:@"昨天"];

        }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 = [[NSDateFormatteralloc]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 = [[NSCalendaralloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

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

NSTimeZone *timeZone = [[NSTimeZonealloc] 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 =  [[NSDatealloc] 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 = [NSCalendarcurrentCalendar];

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;

}