NSDate Abfrage ob Datum zwischen 2 anderen Daten liegt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSDate Abfrage ob Datum zwischen 2 anderen Daten liegt

    Hi zusammen,

    hab ne Anfängerfrage zu NSDate:

    Ich habe ein Datum (labelDate) dass ich mir aus einem Label hole. Dann habe ich ein weiteres Datum (checkDate), bei dem ich prüfen möchte,
    ob es in dem Zeitraum von 7Tagen vor und 7 Tage nach dem labelDate liegt. Ich habe momentan Code geschrieben, der nicht wirklich funktioniert,
    ich hoffe ihr könnt mir hierbei helfen.

    Vielen Dank für eure Hilfe!

    Quellcode

    1. NSMutableArray *ar = [xmlcont table];
    2. ErgebnisInput *current;
    3. NSDateFormatter *df = [[NSDateFormatter alloc] init];
    4. [df setDateFormat:@"yyyy-MM-dd"];
    5. NSDate *labelDate = [df dateFromString:formattedDate];
    6. NSDate *GameDay;
    7. NSDate *start = [NSDate dateWithTimeInterval:-604800 sinceDate: labelDate];
    8. NSDate *end = [NSDate dateWithTimeInterval:-604800 sinceDate: labelDate];
    9. for(int j = 0; j < [ar count]; j++){
    10. current = [ar objectAtIndex:j];
    11. gameDate = [current gameDate];
    12. gameDate = [gameDate substringToIndex:[gameDate length] - 9];
    13. GameDay = [df dateFromString:gameDate];
    14. if(![GameDay compare:start] == NSOrderedAscending && ![GameDay compare:end] == NSOrderedDescending){
    15. NSLog(@"Here");
    16. }
    17. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pretime ()

  • Quellcode

    1. //...
    2. NSTimeInterval interval;
    3. interval = [labelDate timeIntervalSinceDate: gameDay]; //keine Objekte bzw Pointer groß schreiben
    4. interval = sqrt(interval*interval); //so wirds positiv
    5. if(interval < ( 7*24*60*60 ))
    6. //...

    Hoffe das stimmt so, ist nur so „frei Hand“ entstanden. :D
    Viel Spaß beim basteln lg
  • Das sieht zwar alles etwas umständlich aus, aber mit den in diesen und im anderen Thread genannten Einschränkungen müsste es auch funktionieren, wenn Du das Minus vor der Zahl in der zweiten dateWithTimeInterval-Zeile wegnimmst und unten im Vergleich != statt ! und == verwendest.

    Ach ja, um den Betrag einer Zahl zu ermitteln gibt es einen einfacheren Weg als die Wurzel aus dem Quadrat: fabs()
    Multigrad - 360°-Produktfotografie für den Mac
  • irgendwie funktioniert es nicht wirklich, er schränkt mir die Ergebnisse nicht ein:
    Ich möcht doch nur vergleichen, ob GameDay zwischen start und ende liegt:

    Quellcode

    1. interval = [labelDate timeIntervalSinceDate: GameDay]; //keine Objekte bzw Pointer groß schreiben
    2. interval = sqrt(interval*interval); //so wirds positiv
    3. if(interval < ( 4*24*60*60 ) && interval > -(4*24*60*60) ){
    4. [DateArray addObject:[ar objectAtIndex:j]];
    5. }
  • Probiere mal so ?

    Quellcode

    1. NSDate *toDay = [NSDate date]; // ERSTES DATUM
    2. NSDate *testDate = [NSDate dateWithTimeInterval:604800 sinceDate:toDay]; // Zweites Datum
    3. int diff = [toDay timeIntervalSinceDate:testDate];
    4. if (abs(diff) <= 604800)
    5. {
    6. NSLog(@" Im Bereich von 7 Tagen ");
    7. }
    8. else
    9. {
    10. NSLog(@" Nicht im Bereich von 7 Tagen ");
    11. }
    Alles anzeigen
  • GameDay: 2011-07-24, start:1969-12--2147483629, end:1969-12--2147483629


    Ich sehe zwar jetzt den Fehler ;) weiß aber nicht wie ich ihn beheben kann :=)


    Quellcode

    1. NSDate *start = [NSDate dateWithTimeInterval:-604800 sinceDate: labelDate];
    2. NSDate *end = [NSDate dateWithTimeInterval:604800 sinceDate: labelDate];

  • Du hattest recht, das Label war Mist, aber es geht trotzdem nicht, hier ist der Log:

    Hier müsste er doch eigtl. ins if gehen?!


    Quellcode

    1. GameDay: 2011-07-17, start:2011-07-01, end:2011-07-15



    ---

    Quellcode

    1. NSDate *GameDay;NSDate *start = [NSDate dateWithTimeInterval:-604800 sinceDate: labelDate];
    2. NSDate *end = [NSDate dateWithTimeInterval:604800 sinceDate: labelDate];
    3. for(int j = 0; j < [ar count]; j++){
    4. current = [ar objectAtIndex:j];
    5. gameDate = [current gameDate];
    6. gameDate = [gameDate substringToIndex:[gameDate length] - 9];
    7. GameDay = [df dateFromString:gameDate];
    8. interval = [labelDate timeIntervalSinceDate: GameDay]; //keine Objekte bzw Pointer groß schreiben
    9. interval = sqrt(interval*interval); //so wirds positiv
    10. NSLog(@"GameDay: %@, start:%@, end:%@", [df stringFromDate:GameDay],[df stringFromDate:start],[df stringFromDate:end]);
    11. if([GameDay compare:start] == NSOrderedDescending && [GameDay compare:end] == NSOrderedAscending) {
    12. NSLog(@"HIER");
    13. }
    Alles anzeigen