让NSDate说“XX之前”那篇文章发表了

时间:2013-05-10 02:16:33

标签: ios nsdate

我有一篇文章发表日期,但需要多久以前发布与当前时间有关的文章。

因此,如果该文章是在上午8:45发布的,并且是在同一天的上午9:45,我需要能够有一个“1小时前”的UILabel。

目前,我的日期格式为“2013年5月5日下午5:35”:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        Feed *feedLocal = [headlinesArray objectAtIndex:indexPath.row];
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"MMMM d, yyyy h:mma"];
        NSString *dateString = [df stringFromDate:feedLocal.published];
        cell.publishedLabel.text = dateString;
}

我怎样才能将其转换为“1小时前”?谢谢!

修改

以下是我必须至少获得时间的当前方法:

-(NSString *)timeAgo {
    NSDate *todayDate = [NSDate date];

    double ti = [self timeIntervalSinceDate:todayDate];
    ti = ti * -1;
    if (ti < 1) {
        return @"1s";
    } else if (ti < 60) {
        return @"1m";
    } else if (ti < 3600) {
        int diff = round(ti / 60);
        return [NSString stringWithFormat:@"%dm", diff];
    } else if (ti < 86400) {
        int diff = round(ti / 60 / 60);
        return[NSString stringWithFormat:@"%dh", diff];
    } else if (ti < 2629743) {
        int diff = round(ti / 60 / 60 / 24);
        return[NSString stringWithFormat:@"%dd", diff];
    } else if (ti < 31556926) {
        int diff = round(ti / 60 / 60 / 24 / 30);
        return [NSString stringWithFormat:@"%dmo", diff];
    } else {
        int diff = round(ti / 60 / 60 / 24 / 30 / 12);
        return [NSString stringWithFormat:@"%dy", diff];
    }
}

1 个答案:

答案 0 :(得分:1)

我不确定timeAgo是什么方法,但是这里有一个解决方案,假设它与tableView在同一个viewController中:cellForRowAtIndexPath。如果你能澄清一下我的方法可以修改它并帮助你更多。

首先更改时间,以便接受日期并对其进行比较。

-(NSString *)timeSincePublished:(NSDate *)publicationDate 
{
    double ti = [publicationDate timeIntervalSinceNow];

上述方法中的其他所有内容都应该相同。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Feed *feedLocal = [headlinesArray objectAtIndex:indexPath.row];
    NSString *dateString = [self timeSincePublished:feedLocal.published];
    cell.publishedLabel.text = dateString;
}