-1

Instagram プログラムのスナップ、日付は (例) 2 時間前/3 日前/1 週間前として表示されます..「2013-03-20 16:02:48」と表示されます..文字列「2 日前」を取得するにはどうすればよいですか"?

4

3 に答える 3

1

オープンソースプロジェクトがあります

https://github.com/billgarrison/SORelativeDateTransformer

そのドキュメントから:

たとえば、現在の日時が 2010-12-05 11:30 の場合、
... 2010-12-05 11:00 は「30 分前」に変換され
ます ... 2010-12-01 11:00は「5 日前」
に変換されます ... 2010-12-25 08:00 は「2 週間後」に変換されます

// Display a file's creation date relative to today's date
NSURL *someFilePath = ...;
NSDictionary *attribs = [[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:NULL];

NSDate *dateModified = [attribs fileModificationDate];

// fileModificationDate is 2010-10-01 12:00:00TZ; 
// Date now is 2010-10-30 12:00:00TZ

SORelativeDateTransformer *relativeDateTransformer = [[SORelativeDateTransformer alloc] init];
NSString *relativeDate = [relativeDateTransformer transformedValue: dateModified];

NSLog (@"This file was modified %@.", relativeDate); // ==> "This file was modified 3 weeks ago."
于 2013-03-22T12:13:41.477 に答える
1

NSCalendarNSDateComponentsを使用して違いを計算し、エンド ユーザーと同様に明確にすることを検討してください。

于 2013-03-22T11:51:52.697 に答える
0

たぶん、あなたのためにそれを行うライブラリがどこかにあるでしょう。

しかし、とにかく難しいことではありません。NSDate をそのコンポーネントに分解することができます。それらを比較し、必要なすべてのケースをカバーする if then else コードを書くのは簡単です。

過去 7 日以内の適切な曜日に Date を解決している私のプロジェクトの 1 つの例を次に示します。

NSString *resultDateString;

// First, reduce the two dates we want to compare to the scope of days by erasing hours, minutes and seconds

unsigned int flagA = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *compsA = [[NSCalendar currentCalendar] components:flagA fromDate:myObjectsDate];
[compsA setHour:0];
[compsA setMinute:0];
[compsA setSecond:0];
NSDate *checkDate = [[NSCalendar currentCalendar] dateFromComponents:compsA];

unsigned int flagB = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *partsB = [[NSCalendar currentCalendar] components:flagB fromDate:[NSDate date]];
[compsB setHour:0];
[compsB setMinute:0];
[compsB setSecond:0];
NSDate *nowDate = [[NSCalendar currentCalendar] dateFromComponents:compsB];

// Get the interval between the two dates, interval is still in seconds, but since it is calculated using days only, it will be precisely 0 if the day is the same    

NSTimeInterval interval = [searchDate timeIntervalSinceDate:nowDate];

// check if the objects date is today. If it isn't, find out which day it is and name it appropriately

if (interval == 0) {

    resultDateString = [NSString stringWithString:@"Today"];

} else {

   unsigned int flagC = NSWeekdayCalendarUnit;
   NSDateComponents *compsC = [[NSCalendar currentCalendar] components:flagC fromDate:myObjectsDate];

   switch ([compsC weekday]) {
       case 1:
           resultDateString = @"Sunday";
           break;
       case 2:
           resultDateString = @"Monday";
           break;
       case 3:
           resultDateString = @"Tuesday";
           break;
       case 4:
           resultDateString = @"Wednesday";
           break;
       case 5:
           resultDateString = @"Thursday";
           break;
       case 6:
           resultDateString = @"Friday";
           break;
       case 7:
           resultDateString = @"Saturday";
           break;

       default:
           break;
   }

}

これは抜粋にすぎません。たとえば、このコード スニペットでは、間隔が 7 日を超えているかどうかを確認していないことに注意してください。しかし、これを行う方法の基本的なアイデアを提供すると思います。

于 2013-03-22T12:14:02.987 に答える