How to convert NSDate in to relative format as “Today”,“Yesterday”,“a week ago”,“a month ago”,“a year ago”?

前端 未结 16 2062
天命终不由人
天命终不由人 2020-11-28 22:08

I want to convert nsdate in to relative format like \"Today\",\"Yesterday\",\"a week ago\",\"a month ago\",\"a year ago\",\"date as it is\".

I have writ

16条回答
  •  庸人自扰
    2020-11-28 22:36

    To format the given "sourceDate" as "5:56 pm" for today, "yesterday" for any time yesterday, "January 16" for any day in the same year and "January 16, 2014". I am posting my own method.

    sourceDate = //some date that you need to take into consideration
    
    
     NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitMinute | NSCalendarUnitHour | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
        NSDateComponents *sourceDateComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitMinute | NSCalendarUnitHour | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate: sourceDate];
    
        NSString* timestamp;
    
        NSDateFormatter *formatSourceDate   =   [NSDateFormatter new];
        [formatSourceDate setAMSymbol:@"AM"];
        [formatSourceDate setPMSymbol:@"PM"];
    
        //same day - time in h:mm am/pm
        if (components.day == sourceDateComponents.day) {
            NSLogInfo(@"time");
            [formatSourceDate setDateFormat:@"h:mm a"];
            timestamp = [NSString stringWithFormat:@"%@",[formatSourceDate stringFromDate:date]];
            return timestamp;
        }
        else if (components.day - sourceDateComponents.day == 1) {
            //yesterday
            timestamp = NSLocalizedString(@"Yesterday", nil);
            return timestamp;
        }
        if (components.year == sourceDateComponents.year) {
            //september 29, 5:56 pm
            [formatSourceDate setDateFormat:@"MMMM d"];
            timestamp = [NSString stringWithFormat:@"%@",[formatSourceDate stringFromDate:date]];
            return timestamp;
        }
        [formatSourceDate setDateFormat:@"MMMM d year"];
        timestamp = [NSString stringWithFormat:@"%@",[formatSourceDate stringFromDate:date]];
        return timestamp;
    
        NSLogInfo(@"Timestamp : %@",timestamp);
    

提交回复
热议问题