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)
{
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
{
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 | NSCalendarUnitMonth | NSCalendarUnitDay;
// 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;
}