Ios NSDate返回小时/天/周

Ios NSDate返回小时/天/周,ios,objective-c,cocoa,nsdate,Ios,Objective C,Cocoa,Nsdate,Instagram程序中的快照,日期显示为(例如)2小时前/3天前/1周前。。我有“2013-03-2016:02:48”。。如何获取字符串“2天前”?考虑使用和计算差异,并与最终用户类似地表达。有一个开源项目 根据其文件: 例如,当当前日期时间为2010-12-05 11:30时,则 ... 2010-12-05 11:00被转换为“30分钟前” ... 2010-12-01 11:00转换为“5天前” ... 2010-12-25 08:00改为“两周内” 也许某个地方有个图书馆可以帮你

Instagram程序中的快照,日期显示为(例如)2小时前/3天前/1周前。。我有“2013-03-2016:02:48”。。如何获取字符串“2天前”?

考虑使用和计算差异,并与最终用户类似地表达。

有一个开源项目

根据其文件:

例如,当当前日期时间为2010-12-05 11:30时,则
... 2010-12-05 11:00被转换为“30分钟前”
... 2010-12-01 11:00转换为“5天前”
... 2010-12-25 08:00改为“两周内”


也许某个地方有个图书馆可以帮你

但这并不难。可以将NSDate分解为其组件。这样就很容易比较它们,并编写一些if-then-else代码来覆盖所有需要的情况

以下是我的一个项目中的一个示例,我正在将日期解析为过去七天内的适当工作日:

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天,例如,因为我在代码中以不同的方式介绍了这些情况。但是我想它会给你一个如何做的基本想法。

这个问题与xcode无关,因为如果代码是用xcode、vi编写的,或者是用电报输入的,这并不重要。请仅在需要了解Xcode编辑器本身的情况下使用Xcode标记。NSDateComponents对象,而不是iOS?我已经用这个目标解决了这个问题。所以别傻了,你在说什么?所以你显然没有明白我说的:Xcode是一个编辑器。它用于编写程序,但不是一种编程语言(即objective-c)。它不是与编程语言(即Cocoa/Cocoa Touch)一起使用的类和函数的集合。它不是一个操作系统(即Mac OS X/iOS)。Xcode也不是也不包含NSDATE组件。这属于框架。您可以在任何其他编辑器中使用Objective-C、cocoa touch和NSDateComponents编写iOS程序。这无关紧要。Xcode是不相关的,您的标记会将NoiseOn添加到Xcode标记,这意味着正确标记Xcode的帖子会丢失。所以,请聪明一点,至少聪明一点。开发人员不知道他们的工具是一个负担。很好。但是请注意,如果您只是查找一些实现细节,则其许可证需要attribute.not。不管怎样:在该表扬的地方表扬……我不在乎归因。相反,我的评论是为了提醒大家尊重许可证,因为归属是最容易“忘记”的要求之一。啊,好的。为了本地化,我很乐意在Helvetica Neue all caps 24.0中添加属性。
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;
   }

}