iOS 開發中關於時間顯示問題(今天/昨天/前天/星期幾/具體日期)
阿新 • • 發佈:2019-02-05
開發中關於時間顯示問題(今天/昨天/前天/星期幾/具體日期)
以今天為基準,顯示 今天/昨天/前天(昨天12:12)
離今天一週之內的顯示 星期幾(星期四)
離今天一週之外的顯示 具體日期(15-09-05 12:33)
為了直觀方便,直接上程式碼,有註釋。(都寫在ViewController中,需要的自己可以將方法拿出去封裝到工具類中)
// ViewController.m
// Test
//
// Created by chenqianfeng on 15/9/15.
// Copyright (c) 2015年 chenqianfeng. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@",[self format:@"2015年09月1日 12時12分12秒"]);
NSLog(@"%@",[self format:@"2015年09月10日 12時12分12秒"]);
NSLog(@"%@",[self format:@"2015年09月14日 12時12分12秒"]);
}
- (NSString *)format:(NSString *)string
{
NSDateFormatter *inputFormatter= [[NSDateFormatter alloc] init];
[inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ];
[inputFormatter setDateFormat:@"yyyy年MM月dd日 HH時mm分ss秒"];
NSDate*inputDate = [inputFormatter dateFromString:string];
NSDateFormatter *outputFormatter= [[NSDateFormatter alloc] init];
[outputFormatter setLocale:[NSLocale currentLocale]];
[outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss" ];
//get date str
NSString *str= [outputFormatter stringFromDate:inputDate];
//str to nsdate
NSDate *strDate = [outputFormatter dateFromString:str];
//修正8小時的差時
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: strDate];
NSDate *endDate = [strDate dateByAddingTimeInterval: interval];
//NSLog(@"endDate:%@",endDate);
NSString *lastTime = [self compareDate:endDate];
// NSLog(@"lastTime = %@",lastTime);
return lastTime;
}
-(NSString *)compareDate:(NSDate *)date
{
NSTimeInterval secondsPerDay = 24 * 60 * 60;
//修正8小時之差
NSDate *date1 = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: date1];
NSDate *localeDate = [date1 dateByAddingTimeInterval: interval];
//NSLog(@"nowdate=%@\nolddate = %@",localeDate,date);
NSDate *today = localeDate;
NSDate *yesterday,*beforeOfYesterday;
//今年
NSString *toYears;
toYears = [[today description] substringToIndex:4];
yesterday = [today dateByAddingTimeInterval: -secondsPerDay];
beforeOfYesterday = [yesterday dateByAddingTimeInterval: -secondsPerDay];
// 10 first characters of description is the calendar date:
NSString *todayString = [[today description] substringToIndex:10];
NSString *yesterdayString = [[yesterday description] substringToIndex:10];
NSString *beforeOfYesterdayString = [[beforeOfYesterday description] substringToIndex:10];
NSString *dateString = [[date description] substringToIndex:10];
NSString *dateYears = [[date description] substringToIndex:4];
NSString *dateContent;
if ([dateYears isEqualToString:toYears]) {//同一年
//今 昨 前天的時間
NSString *time = [[date description] substringWithRange:(NSRange){11,5}];
//其他時間格式:15-09-01 12:12
NSString *time2 = [[date description] substringWithRange:(NSRange){2,14}];
if ([dateString isEqualToString:todayString]){
dateContent = [NSString stringWithFormat:@"今天%@",time];
return dateContent;
} else if ([dateString isEqualToString:yesterdayString]){
dateContent = [NSString stringWithFormat:@"昨天%@",time];
return dateContent;
}else if ([dateString isEqualToString:beforeOfYesterdayString]){
dateContent = [NSString stringWithFormat:@"前天%@",time];
return dateContent;
}else{
if ([self compareDateFromeWorkTimeToNow:[[date description] substringWithRange:(NSRange){5,11}]]) {
//一週之內除了今天昨天前天之外顯示星期
return [[self class]weekdayStringFromDate:date];
}else{
//一週之外的顯示日期
return time2;
}
}
}else{
return dateString;
}
}
//傳入時間字元與今天比較是否在一週之內
- (BOOL)compareDateFromeWorkTimeToNow:(NSString *)timeStr
{
NSString *todayStr = [self dateTransformToTimeString];
int today = [todayStr substringWithRange:(NSRange){3,2}].intValue;
int workTime = [timeStr substringWithRange:(NSRange){3,2}].intValue;
if ([[timeStr substringToIndex:2] isEqualToString:[todayStr substringToIndex:2]]) {
if (today - workTime <= 6) {
return YES;
}else{
return NO;
}
}else{
return NO;
}
}
//獲得當前時間並且轉為字串(擷取後的)
- (NSString *)dateTransformToTimeString
{
//獲得當前時間 2014-07-16 07:54:36 +0000(NSDate類)
NSDate *currentDate = [NSDate date];
//轉為字串
NSDateFormatter*df = [[NSDateFormatter alloc]init];//例項化時間格式類
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];//格式化
//2014-07-16 07:54:36(NSString類)
NSString *timeString = [df stringFromDate:currentDate];
timeString = [timeString substringFromIndex:5];
return timeString;
}
//傳入時間返回星期幾
+ (NSString*)weekdayStringFromDate:(NSDate*)inputDate
{
NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"星期日", @"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", nil];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];
[calendar setTimeZone: timeZone];
NSCalendarUnit calendarUnit = NSWeekdayCalendarUnit;
NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];
return [weekdays objectAtIndex:theComponents.weekday];
}
@end