Ios 计算日期之间的周数,并将其作为NSString格式的Instagram呈现

Ios 计算日期之间的周数,并将其作为NSString格式的Instagram呈现,ios,objective-c,cocoa-touch,nsdate,date-arithmetic,Ios,Objective C,Cocoa Touch,Nsdate,Date Arithmetic,我有一些NSDates,我想以周为单位展示,比如Instagram如何处理他们的照片时间戳。值将是“本周”、“上周”、“2周前”,依此类推到“N周前” 请帮我弄清楚这个算法。您需要在Cocoa(Touch)中执行的任何操作都将涉及和。他们可以很容易地为你找出两个日期之间的差异 NSDate * originDate = ...; NSCalendar * cal = [NSCalendar currentCalendar]; NSDateComponents * weekComp = [cal

我有一些
NSDate
s,我想以周为单位展示,比如Instagram如何处理他们的照片时间戳。值将是“本周”、“上周”、“2周前”,依此类推到“N周前”

请帮我弄清楚这个算法。

您需要在Cocoa(Touch)中执行的任何操作都将涉及和。他们可以很容易地为你找出两个日期之间的差异

NSDate * originDate = ...;
NSCalendar * cal = [NSCalendar currentCalendar];
NSDateComponents * weekComp = [cal components:NSCalendarUnitWeekOfYear
                                     fromDate:originDate
                                       toDate:[NSDate date] // right now
                                      options:0];
现在
[weekComp weekOfYear]
将告诉您这两个日期之间有多少周

从这里开始,它只是一些字符串格式:

NSInteger weeksAgo = [weekComp weekOfYear];
NSString * timestampString;
switch( weeksAgo ){
    case 0:
        timestampString = @"This week";
        break;
    case 1:
        timestampString = @"Last week";
        break;
    default:
        timestampString = [NSString stringWithFormat:@"%d weeks ago", (int)weeksAgo];
}
如果您需要按“日历”周(星期日到星期六)计数,那么在星期三,前一个星期六是“上周”,您必须考虑日期的工作日

NSDateComponents * weekdayComp = [cal components:NSCalendarUnitWeekday|NSCalendarUnitWeekOfYear
                                        fromDate:originDate
                                          toDate:objDate
                                         options:0];
NSInteger weekdaysAgo = [weekdayComp weekday];
NSInteger objWeekday = [cal component:NSCalendarUnitWeekday fromDate:objDate];
    
在同一通话中询问这两个Delta(工作日和一年中的一周)的日历将导致2015年7月13日星期一到2015年7月22日星期三的间隔为“1周2天”;首先计算较大的单位,较小的单位将填充剩余的单位

然后得到目标日期的工作日编号(星期日=1,星期一=2,等等)。如果
weekdaysAgo
值等于或大于该值,则起始日期为
weakoffyear
值所指示日期的前一周。Floored部门将给出要添加的周数(1或0)


然后,将这个新的
weeksAgo
值与上面相同的
开关一起使用。

因此,首先,它可以工作!!谢谢你,兄弟。现在,你能帮我解决一个小问题吗?我在看日历,我的日期是2015年7月17日,从技术上讲这是上周,但它显示我这周…因为这正好是7天,所以这仍然是一周,但我想知道根据我们的日历,这周是什么…我需要更改什么?我已经编辑以提供该功能,@Nir。你必须考虑目标日期的星期几。
NSInteger weeksAgo = [weekdayComp weekOfYear] + (weekdaysAgo / objWeekday);