天天看點

iOS_時間戳與日期轉換(幾分鐘前)

mark for myself.

時間戳轉時間的時候,經常會遇到要轉換成幾分鐘前的類型。比如最新品論發表于“一分鐘前”或者“十分鐘前”等。

以下為自己開發過程中遇到的時間戳轉換成該類型字元串和其他時間戳與日期轉換的方法封裝:

#define mark - 時間
/**
 *  時間戳轉成字元串
 *
 *  @param timestamp 時間戳
 *
 *  @return 格式化後的字元串
 */
+ (NSString *)timeFromTimestamp:(NSInteger)timestamp{
    
    NSDateFormatter *dateFormtter =[[NSDateFormatter alloc] init];
    NSDate *d = [NSDate dateWithTimeIntervalSince1970:timestamp];
    NSTimeInterval late=[d timeIntervalSince1970]*1;    //轉記錄的時間戳
    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
    NSTimeInterval now=[dat timeIntervalSince1970]*1;   //擷取目前時間戳
    NSString *timeString=@"";
    NSTimeInterval cha=now-late;
    // 發表在一小時之内
    if (cha/3600<1) {
        if (cha/60<1) {
            timeString = @"1";
        }
        else
        {
            timeString = [NSString stringWithFormat:@"%f", cha/60];
            timeString = [timeString substringToIndex:timeString.length-7];
        }
        
        timeString=[NSString stringWithFormat:@"%@分鐘前", timeString];
    }
    // 在一小時以上24小以内
    else if (cha/3600>1&&cha/86400<1) {
        timeString = [NSString stringWithFormat:@"%f", cha/3600];
        timeString = [timeString substringToIndex:timeString.length-7];
        timeString=[NSString stringWithFormat:@"%@小時前", timeString];
    }
    // 發表在24以上10天以内
    else if (cha/86400>1&&cha/86400*3<1)     //86400 = 60(分)*60(秒)*24(小時)   3天内
    {
        timeString = [NSString stringWithFormat:@"%f", cha/86400];
        timeString = [timeString substringToIndex:timeString.length-7];
        timeString=[NSString stringWithFormat:@"%@天前", timeString];
    }
    // 發表時間大于10天
    else
    {
        [dateFormtter setDateFormat:@"yyyy-MM-dd"];
        timeString = [dateFormtter stringFromDate:d];
    }
    
    return timeString;
}
/**
 *  根據格式将時間戳轉換成時間
 *
 *  @param timestamp    時間戳
 *  @param dateFormtter 日期格式
 *
 *  @return 帶格式的日期
 */
+ (NSString *)timeFromTimestamp:(NSInteger)timestamp formtter:(NSString *)formtter{
    NSDateFormatter *dataFormtter =[[NSDateFormatter alloc] init];
    [dataFormtter setDateFormat:formtter];
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
    NSString *time = [dataFormtter stringFromDate:date];
    return time;
}

/**
 *  擷取目前時間戳
 */
+ (NSString *)timeIntervalGetFromNow{
    
    // 擷取時間(非本地時區,需轉換)
    NSDate * today = [NSDate date];
    NSTimeZone *zone = [NSTimeZone systemTimeZone];
    NSInteger interval = [zone secondsFromGMTForDate:today];
    // 轉換成當地時間
    NSDate *localeDate = [today dateByAddingTimeInterval:interval];
    // 時間轉換成時間戳
    NSString *timeSp = [NSString stringWithFormat:@"%ld",(long)[localeDate timeIntervalSince1970]];
    
    return timeSp;
}