Замена объекта даты на строки "сегодня" и "вчера" в iphone

Я хочу вернуть свои объекты даты со строкой "сегодня" и "вчера" и даты в Objective C. Пожалуйста, все комментарии приветствуются:

У меня есть даты с форматом @ "yyyy-MM-dd HH: mm: ss" ], а затем выясняется, установлена ​​ли дата сегодня или вчера, и, если это так, она возвращает "(вчера, сегодня | дата)" сформированная строка.

Ответ 1

NSDateFormatter может это сделать. Однако это не работает с пользовательскими форматами дат, но в большинстве случаев, когда вам нужны относительные даты, которые вы представляете их пользователю, и вы не должны использовать жестко кодированные форматы дат в первое место.

NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.timeStyle = NSDateFormatterMediumStyle;
df.dateStyle = NSDateFormatterShortStyle;
df.doesRelativeDateFormatting = YES;  // this enables relative dates like yesterday, today, tomorrow...

NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:-48*60*60]]);
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:-24*60*60]]);
NSLog(@"%@", [df stringFromDate:[NSDate date]]);
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:24*60*60]]);
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:48*60*60]]);

это напечатает:

2013-06-06 09:13:22.844 x 2[11732:c07] 6/4/13, 9:13:22 AM
2013-06-06 09:13:22.845 x 2[11732:c07] Yesterday, 9:13:22 AM
2013-06-06 09:13:22.845 x 2[11732:c07] Today, 9:13:22 AM
2013-06-06 09:13:22.846 x 2[11732:c07] Tomorrow, 9:13:22 AM
2013-06-06 09:13:22.846 x 2[11732:c07] 6/8/13, 9:13:22 AM

На устройстве с немецким языком это будет печатать "Vorgestern" (позавчера) и "Übermorgen" (послезавтра) на первую и последнюю дату.

Ответ 2

Как насчет NSDateFormatter setDoesRelativeDateFormatting?

Указывает, использует ли приемник фразы, такие как "сегодня" и "завтра" для компонента даты.

- (void)setDoesRelativeDateFormatting:(BOOL)b
Задайте параметры b = YES, чтобы указать, что приемник должен использовать относительное форматирование даты, иначе NO.

Посмотрите: ссылка класса NSDateFormatter

Ответ 3

Я надеюсь, что это тоже будет полезно для вас:

    NSDate *date = somedate;
    NSInteger dayDiff = (int)[date timeIntervalSinceNow] / (60*60*24);
    NSDateComponents *componentsToday = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
    NSDateComponents *componentsDate = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:somedate];
    NSInteger day = [componentsToday day] - [componentsDate day];
    if (dayDiff == 0) {
        NSLog(@"Today");
    } else if (dayDiff == -1) {
        NSLog(@"Yesterday");
    } else if(dayDiff > -7 && dayDiff < -1) {
        NSLog(@"This week");
    } else if(dayDiff > -14 && dayDiff <= -7) {
        NSLog(@"Last week");
    } else if(dayDiff >= -60 && dayDiff <= -30) {
        NSLog(@"Last month");
    } else {
        NSLog(@"A long time ago");
    }

Ответ 4

Замена объекта даты на строки "сегодня" и "вчера" в Swift.

Если вы хотите отобразить дату с другим форматом, измените timeStyle и dateStyle, как вам нужно.

var df = DateFormatter()
df.timeStyle = .medium
df.dateStyle = .short
df.doesRelativeDateFormatting = true
// this enables relative dates like yesterday, today, tomorrow...
print("\(df.string(from: Date(timeIntervalSinceNow: -48 * 60 * 60)))")
print("\(df.string(from: Date(timeIntervalSinceNow: -24 * 60 * 60)))")
print("\(df.string(from: Date()))")
print("\(df.string(from: Date(timeIntervalSinceNow: 24 * 60 * 60)))")
print("\(df.string(from: Date(timeIntervalSinceNow: 48 * 60 * 60)))")

Результат:

6/4/13, 9:13:22 AM 
Yesterday, 9:13:22 AM 
Today, 9:13:22 AM
Tomorrow, 9:13:22 AM 
6/8/13, 9:13:22 AM

Ответ 5

    NSDate *todayDate = [NSDate date];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString *today = [dateFormat stringFromDate:todayDate];
    NSLog(@"today is %@",today);
    NSDate *yesterdayDate = [todayDate dateByAddingTimeInterval: -86400.0];
    NSString *yesterday = [dateFormat stringFromDate:yesterdayDate];
    NSLog(@"yesterday was %@",yesterday);

    NSString *yourDate = [NSString stringWithFormat:@"2013-06-08 12:33:28"];

    if ([yourDate isEqualToString:yesterday]) {

        NSLog(@"yesterday");
    }
    else if ([yourDate isEqualToString:today])
    {
        NSLog(@"today");

    }
    else
    {
        NSLog(@"the date is %@",yourDate);
    }

1) выведите сегодня и вчера дату, затем сравните дату, которую вы вводите, и напечатайте соответственно

Ответ 6

NSTimeInterval interval = [dict[@"deviceTimeStamp"]doubleValue]; // set your intervals
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval]; // set your past date or create it using dateWithIntervalSince1970 method
[formatter setDateFormat:@"hh:mm a"];
NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = [tz secondsFromGMTForDate: date];
NSDate *dateee =  [NSDate dateWithTimeInterval: seconds sinceDate: date];
NSDateComponents *components = [[NSCalendar currentCalendar] components:units fromDate:dateee toDate:[NSDate date] options:0];
    if (components.day > 0)
    {
        if (components.day > 1){
            [formatter setDateFormat:@"MMM dd"];
            NSString *dateString = [formatter stringFromDate:date];
            NSlog(@"%@",dateString);
        }
        else{
                NSlog(@"Yesterday");
        }
   }
   else{
                NSlog(@"Today");
   }