ios日期-今天,昨天,星期几,仿微信

我们以微信聊天为例,在消息界面的右上方有时间,当天显示时间,以及昨天,星期几,这些情况。以及其他的一些聊天软件里面有多少秒之前,几分钟之前这样的。
然后在网上找了半天,没有完全符合。想拿过来改改,改了一下感觉非常费事,然后就自己写了。最后发现还是下面代码写法最通用。

代码没什么难度,修改也很方便,主要是逻辑简单,方便使用。不管你有什么日期比较需求,下面的写法绝对可以提供最多的功能。

1.将所有年月日时分秒提取出来,方便大家做比较.
- (NSString *)formateDate:(NSDate *)originDate
{
    
    @try {
        NSString *dateStr = nil;
        // ------实例化一个NSDateFormatter对象
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];//这里的格式必须和DateString格式一致
        NSDate * nowDate = [NSDate date];
        
        // ------将需要转换的时间转换成 NSDate 对象
        
        NSString *originDateStr = [dateFormatter stringFromDate:originDate];
        NSString *nowDateStr = [dateFormatter stringFromDate:nowDate];
        // 年
        NSString * yearStr = [originDateStr substringToIndex:4];
        NSString * nowYear = [nowDateStr substringToIndex:4];
        BOOL isSameYear = [yearStr isEqualToString:nowYear];
        // 月
        NSRange monthRange = NSMakeRange(5, 2);
        NSString *monthStr = [originDateStr substringWithRange:monthRange];
        NSString *nowMonth = [nowDateStr substringWithRange:monthRange];
        BOOL isSameMonth = [monthStr isEqualToString:nowMonth];
        // 日
        NSRange dayRange = NSMakeRange(8, 2);
        NSString *dayStr = [originDateStr substringWithRange:dayRange];
        NSString *nowDay = [nowDateStr substringWithRange:dayRange];
        BOOL isSameDay = [dayStr isEqualToString:nowDay];
        int dayValue = nowDay.intValue - dayStr.intValue;// 天数间隔
        // 时
        NSRange hourRange = NSMakeRange(11, 2);
        NSString *hourStr = [originDateStr substringWithRange:hourRange];
        NSString *nowhour = [nowDateStr substringWithRange:hourRange];
        BOOL isSameHour = [hourStr isEqualToString:nowhour];
        // 分
        NSRange minuteRange = NSMakeRange(14, 2);
        NSString *minuteStr = [originDateStr substringWithRange:minuteRange];
        NSString *nowminute = [nowDateStr substringWithRange:minuteRange];
        // 秒
        NSRange secondRange = NSMakeRange(17, 2);
        NSString *secondStr = [originDateStr substringWithRange:secondRange];
        NSString *nowSecond = [nowDateStr substringWithRange:secondRange];
        /***********************需要的时间字符串**********************/
        if (isSameYear) {
            if (isSameMonth) {
                if (isSameDay) {
                   
                }
                
            }
        }
    } @catch (NSException *exception) {
        return @"";
    } @finally {
        return @"";
    }
}
2.方便需要用到显示星期几的
 
- (NSString*)weekdayStringFromDate:(NSDate*)inputDate {
    
    NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"星期天", @"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", nil];
    
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    
    NSTimeZone *timeZone = [[NSTimeZone alloc] init];
    
    [calendar setTimeZone: timeZone];
    
    NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;
    
    NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];
    
    return [weekdays objectAtIndex:theComponents.weekday];
    
}

3.总结

总体来说并不推荐大家在iOS设备中进行转换,大量的tableviewcell需要时间创建转换,是比较好性能的. 最好让后台处理

你可能感兴趣的:(ios日期-今天,昨天,星期几,仿微信)