2013-06-06 6 views
12

voglio tornare miei oggetti di data con la stringa “oggi” e “ieri” e le date in Objective C.Please tutti i commenti sono benvenuti:sostituzione dell'oggetto appuntamento con “oggi” e archi “Yesterday” a iphone

Ho delle date con il formato @ "aaaa-MM-gg HH: mm: ss"] e poi capisco se la data è oggi o ieri e che, se lo è, restituisce "(Ieri | Oggi | Data)" stringa formata .

+0

Se la data di ieri quale sarà l'output. Per favore, dì cosa esattamente vuoi –

+0

se prima di ieri è necessario mostrare la data stessa .. voglio restituire le stringhe con oggi, ieri e la data stessa .. – Ananya

risposta

21

NSDateFormatter può fare questo. Tuttavia questo non funziona con i formati di data personalizzati, ma nella maggior parte dei casi quando hai bisogno di date relative che li stai presentando all'utente e you should not use hard coded date formats in primo luogo.

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

questo stampa:

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 

su un dispositivo con locale tedesco questo stamperà "vorgestern" (l'altro ieri) e "Ubermorgen" (dopodomani) per il primo e ultimo appuntamento.

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) togliere la data di ieri di oggi e di allora confrontare la data si entra e stampa di conseguenza

4

Che dire di NSDateFormatter s setDoesRelativeDateFormatting?

Specifica se il destinatario utilizza frasi come "oggi" e "domani" per il componente della data.

- (void)setDoesRelativeDateFormatting:(BOOL)b
Impostare i parametri b = YES per specificare che il ricevitore deve utilizzare data la formattazione relativa, altrimenti no.

Date un'occhiata: NSDateFormatter class reference

3

Spero che anche questo sarà utile per voi pure:

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

Non proprio corretto. Il tuo codice verrà etichettato ieri alle 23:00, come "Oggi", se l'ora corrente è in qualsiasi momento prima delle 23:00. La definizione corretta di "Ieri" è in qualsiasi momento tra la mezzanotte della scorsa notte e la mezzanotte della sera prima. Non 24 ore prima ora. – 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

sostituzione della data di oggetto con “oggi” e archi “Yesterday” in Swift.

Se si desidera visualizzare la data con un diverso formato, modificare timeStyle e dateStyle secondo le necessità.

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

Risultato:

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