將時間戳轉換為時間,並輸出“剛剛”、“昨天”、“XX小時前”等
阿新 • • 發佈:2019-02-06
我們在開發iOS程式中需要有介面,有時候藉口提供的時間是NSNumber型別的並且是時間戳。比如說:1447375370 其實這個意思就是1970年0點到當前時間的秒數。
看到這裡,大概我們心裡就有數了。為了方便程式設計中使用,我們寫成NSString的類目(Category),這樣可以通過以下方式直接呼叫即可:
NSString *resultStr = [NSString stringWithTimeStamp:<#此處需要NSNumber型別的時間戳#>];
好了,上程式碼
NSString+TimeString.h
#import <Foundation/Foundation.h>
@interface NSString (TimeString)
/**將時間戳轉換為時間*/
+ (NSString *)stringWithTimeStamp:(NSNumber *)timeStamp;
@end
NSString+TimeString.m
#define anHour 3600
#define aMinute 60
#import "NSString+TimeString.h"
@implementation NSString (TimeString)
+ (NSString *)stringWithTimeStamp:(NSNumber *)timeStamp {
//獲取當前時間
NSDate *currentDate = [NSDate date];
//將當前時間轉化為時間戳
NSTimeInterval currentDateStamp = [currentDate timeIntervalSince1970] + 8 * anHour;
//將傳入的引數轉化為時間戳
double dateStamp = [timeStamp doubleValue] + 8 * anHour;
//計算時間間隔,即當前時間減去傳入的時間
double interval = currentDateStamp - dateStamp;
//獲取當前時間的小時單位(24小時制)
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"H"];
int nowHour = [[formatter stringFromDate:currentDate] intValue];
//獲取當前時間的分鐘單位
NSDateFormatter *minFormatter = [NSDateFormatter new];
[minFormatter setDateFormat:@"m"];
int nowMinute = [[minFormatter stringFromDate:currentDate] intValue];
//今天0點的時間戳
double todayZeroClock = currentDateStamp - anHour * nowHour - aMinute * nowMinute;
//時間格式化,為輸出做準備
NSDateFormatter *outputFormat = [NSDateFormatter new];
[outputFormat setDateFormat:@"M月d日"];
//進行條件判斷,滿足不同的條件返回不同的結果
if (interval < 30 * aMinute) {
//在30分鐘之內
return @"剛剛";
} else if (todayZeroClock - dateStamp > 24 * anHour) {
//已經超過兩天以上
return [outputFormat stringFromDate:[NSDate dateWithTimeIntervalSince1970:dateStamp]];
} else if (todayZeroClock - dateStamp > 0) {
//已經超過一天(昨天)
return @"昨天";
} else if (interval < anHour) {
//一個小時之內
return [NSString stringWithFormat:@"%.0f分鐘前", (currentDateStamp - dateStamp) / aMinute];
} else {
//今天之內
return [NSString stringWithFormat:@"%.0f小時前", (currentDateStamp - dateStamp) / anHour];
}
}
@end