1. 程式人生 > >判斷是否為今年、是否為今天、是否為昨天,比較當前時間和from時間的差值

判斷是否為今年、是否為今天、是否為昨天,比較當前時間和from時間的差值

效果圖:

時間處理樣式:

1:建立NSDate的擴充套件類

  NSDate+LMExtension.h

//  Created by limin on 16/6/21.
//  Copyright © 2016年 limin. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSDate (LMExtension)
/** 比較當前時間和from時間的差值*/
-(NSDateComponents *)deltaFrom:(NSDate *)from;
/** 是否為今年*/
-(BOOL)isThisYear;
/** 是否為今天*/
-(BOOL)isToday;
/** 是否為昨天*/
-(BOOL)isYesterday;
@end

NSDate+LMExtension.m
//
//  Created by limin on 16/6/21.
//  Copyright © 2016年 limin. All rights reserved.
//

#import "NSDate+LMExtension.h"

@implementation NSDate (LMExtension)
-(NSDateComponents *)deltaFrom:(NSDate *)from
{
    //日曆
    NSCalendar *calendar = [NSCalendar currentCalendar];
    //比較時間
    NSDateComponents *comps = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:from toDate:self options:0];
    return comps;
}
-(BOOL)isThisYear
{
    NSDate *now = [NSDate date];
    //日曆
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:now];
    NSInteger selfYear = [calendar component:NSCalendarUnitYear fromDate:self];
    
    return nowYear == selfYear;
    
}
/** 方法1:判斷是否為今天*/
-(BOOL)isToday
{
    //日曆
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    
    NSDateComponents *nowComps = [calendar components:unit fromDate:[NSDate date]];
    NSDateComponents *selfComps = [calendar components:unit fromDate:self];
    
    return nowComps.year == selfComps.year && nowComps.month == selfComps.month && nowComps.day == selfComps.day;
}
/** 方法2:判斷是否為今天*/
//-(BOOL)isToday
//{
//    NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
//    dateformatter.dateFormat = @"yyyy-MM-dd";
//    
//    NSString *nowString = [dateformatter stringFromDate:[NSDate date]];
//    NSString *selfString = [dateformatter stringFromDate:self];
//    return [nowString isEqualToString:selfString];
//}
/** 判斷是否為昨天*/
-(BOOL)isYesterday
{
    NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
    dateformatter.dateFormat = @"yyyy-MM-dd";
    NSDate *nowDate = [dateformatter dateFromString:[dateformatter stringFromDate:[NSDate date]]];
    NSDate *selfDate = [dateformatter dateFromString:[dateformatter stringFromDate:self]];
    
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [calendar components: NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:selfDate toDate:nowDate options:0];
    return comps.year == 0 && comps.month == 0 && comps.day == 1;
}

@end
原文地址連結:http://blog.csdn.net/leemin_ios/article/details/51881853    點選開啟連結
2: 時間賦值.
//Label賦值建立時間
[self setupCreateTime:topicsModel.create_time];

setupCreateTime: 方法實現

#pragma mark - 時間處理
/**
 *self.createTimeLabel:時間標籤
 *今天:
 [
 1分鐘內:剛剛
 1小時內:xx分鐘前
 其他:xx小時前
 ]
 *昨天:幾點幾分
 *其他:6-13 19:12
 *不是今年:去年:年份2014-5-8 18:40:30
 */
-(void)setupCreateTime:(NSString *)create_time
{
    
    //設定日期格式
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    //建立時間
    NSDate *createDate = [formatter dateFromString:create_time];
    
    
    if (createDate.isThisYear) {//今年
        
        if (createDate.isToday) {//今天
            
            //當前時間
            NSDate *nowDate = [NSDate date];
            //比較時間
            NSDateComponents *comps = [nowDate deltaFrom:createDate];
            if (comps.hour >= 1) {
                //時間差距>=1小時
                [self.createTimeLabel setText:[NSString stringWithFormat:@"%zd小時前",comps.hour]];
            }else if (comps.minute >= 1)
            {
                //時間差距<1小時,>=1分鐘
               [self.createTimeLabel setText:[NSString stringWithFormat:@"%zd分鐘前",comps.minute]];
            }else
            {// 時間差距<1分鐘
                [self.createTimeLabel setText:@"剛剛"];
            }
            
            
        }else if (createDate.isYesterday)//昨天
        {
            formatter.dateFormat = @"昨天 HH:mm:ss";
            [self.createTimeLabel setText:[formatter stringFromDate:createDate]];
        }else
        {//其他
            formatter.dateFormat = @"MM-dd HH:mm:ss";
            [self.createTimeLabel setText:[formatter stringFromDate:createDate]];
        }
    }else//非今年
    {
        [self.createTimeLabel setText:create_time];
    }
    
}