2013-06-06 6 views
12

Ich mag meine Date Objekte mit String „heute“ und „gestern“ und Daten in der Ziel-C.Please zurückzukehren alle Kommentare sind willkommen:Austausch von Datumsobjekt mit „heute“ und „gestern“ strings in iphone

Ich habe Daten mit Format @ "yyyy-MM-TT HH: mm: ss"] und dann herausgefunden, ob das Datum heute oder gestern ist und als, wenn es ist, gibt es "formatierte Zeichenfolge (Gestern | Heute | Datum)" zurück .

+0

Wenn das Datum vor gestern, was die Ausgabe sein wird. Bitte sag was du willst. –

+0

wenn das Datum vorgestern das Datum selbst anzeigen muss ... ich möchte die Strings mit heute, gestern und dem Datum selbst zurückgeben .. – Ananya

Antwort

21

NSDateFormatter kann diese eingeben und drucken vergleichen tun. Dies funktioniert jedoch nicht mit benutzerdefinierten Datumsformaten, aber in den meisten Fällen, wenn Sie relative Daten benötigen, stellen Sie sie dem Benutzer und you should not use hard coded date formats an erster Stelle.

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]]); 

diese gedruckt werden:

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 

Auf einem Gerät mit Deutsch locale wird diese „Vorgestern“ (am Tag vor gestern) drucken und „Übermorgen“ (übermorgen) für die erste und letztes Datum.

0
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) herausnehmen Datum von heute und gestern, dann das Sie das Datum entsprechend

4

Was ist mit NSDateFormatter s setDoesRelativeDateFormatting?

Gibt an, ob der Empfänger Ausdrücke wie "heute" und "morgen" für die Datumskomponente verwendet.

- (void)setDoesRelativeDateFormatting:(BOOL)b
Set Parameter b = YES angeben, dass der Empfänger relativ Datumsformat verwenden sollte, andernfalls NO.

Werfen Sie einen Blick: NSDateFormatter class reference

3

Ich hoffe, dass dies auch für Sie als auch sehr nützlich sein wird:

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"); 
    } 
+1

Nicht ganz korrekt. Ihr Code wird gestern um 23 Uhr als "Heute" gekennzeichnet, wenn die aktuelle Uhrzeit jederzeit vor 23 Uhr ist. Die korrekte Definition von "Gestern" ist jede Zeit zwischen Mitternacht der letzten Nacht und der Mitternacht der vorherigen Nacht. Nicht vor 24 Stunden. – mahboudz

0
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"); 
    } 
2

Austausch von Datumsobjekt mit „heute“ und „gestern“ strings in Swift.

Wenn Sie ein Datum mit einem anderen Format anzeigen möchten, ändern Sie die Werte timeStyle und dateStyle nach Bedarf.

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)))") 

Ergebnis:

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 
Verwandte Themen