2012-04-13 6 views

Antwort

1

Ich gehe davon aus, dass dies eine allgemeine Programmierfrage und nicht spezifisch für die iOS-Umgebung ist. Wenn meine Annahme falsch ist, können Sie diese Antwort gerne ignorieren.

Erstellen Sie ein Array mit den Wochentagen. Finden Sie den Index des heutigen Tages, Schleife rückwärts über das Array Kopieren des Inhalts in das Array, das Sie erstellen, wenn Sie auf Null setzen den Index auf 6 setzen (Annahme Null basierte Arrays) und Schleife zurück zum heutigen Tag der Woche.

wie folgt aus (dieser Code ist fiktiv):

string[] days = {"Mon", "Tues" .... "Sun"}; 
string[] last8Days = new string[8]; 
int daysIndex, last8DaysIndex; 
daysIndex = \\some code to get the index of today's day. 
for (last8DaysIndex = 0; last8DaysIndex < 8; last8DaysIndex++) 
{ 
    last8Days[last8DaysIndex] = days[daysIndex]; 
    daysIndex--; 
    if(daysIndex < 0) 
     daysIndex = 6; 
} 

Hoffnung, das hilft.

+0

nehme an, wenn ich heute Index habe und es ist 6 dann, wie die Schleife implementiert werden sollte, bitte erarbeiten oder es wäre besser, wenn Sie ein Beispiel geben. –

+0

2 Fragen: 1. möchten Sie die letzten 7 Tage (wie Sie sagen) oder 8 (wie Ihr Beispiel zeigt)? 2. Soll der aktuelle Tag in der ersten Position sein? –

+0

ja mann 8 tage wie ich gesagt habe. Ja, ich möchte den aktuellen Tag auf der ersten Position. –

5

Meine zwei Cent:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"EEE"]; 

NSDate *now = [NSDate date]; 

NSMutableArray *results = [NSMutableArray arrayWithCapacity:8]; 

for (int i = 0; i < 8; i++) 
{ 
    NSDate *date = [NSDate dateWithTimeInterval:-(i * (60 * 60 * 24)) sinceDate:now]; 
    [results addObject:[dateFormatter stringFromDate:date]]; 
} 

NSLog(@"%@", results); 

So können Sie Ihre lokalisierten Namen von Wochentagen, und Sie müssen nicht eine Reihe von ihnen selbst bauen.

So wie es ist, gibt es Ihnen genau das, wonach Sie gefragt haben.

0

Ich denke, das Stackoverflow Post ist am nützlichsten:

How to check what day of the week it is (i.e. Tues, Fri?) and compare two NSDates?

Siehe Antwort von Can Berk Güder da drin, es könnte Ihnen auf helfen, wie Tag der Woche zu bekommen:

Sie können NSDateComponents für diesen Einsatz:

vorzeichenlose Einheiten = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; NSDateComponents * Komponenten = [gregorianische Komponenten: Einheiten von Datum: Datum]; Dann können Sie auf einzelne Teile des Datums wie folgt zugreifen:

[Komponenten Jahr]; [Komponenten Monat]; [Komponententag]; Oder Sie können ein neues NSDate-Objekt erstellen, indem Sie die Methode dateFromComponents von NSCalendar verwenden, und die beiden NSDate-Objekte vergleichen.

auch unten auf dieses Thema beziehen sich, wie es Ihnen auf helfen kann, wie Sie die Logik von aktuellem Datum letzte bekommen können 7 Tage zu erhalten:

get NSDate today, yesterday, this Week, last Week, this Month, last Month... variables

Siehe Antwort von Ben S:

Angepasst vom Date and Time Programming Guide:

// Right now, you can remove the seconds into the day if you want 
NSDate *today = [NSDate date]; 

// All intervals taken from Google 
NSDate *yesterday = [today dateByAddingTimeInterval: -86400.0]; 
NSDate *thisWeek = [today dateByAddingTimeInterval: -604800.0]; 
NSDate *lastWeek = [today dateByAddingTimeInterval: -1209600.0]; 

// To get the correct number of seconds in each month use NSCalendar 
NSDate *thisMonth = [today dateByAddingTimeInterval: -2629743.83]; 
NSDate *lastMonth = [today dateByAddingTimeInterval: -5259487.66]; 

Wenn Sie die genaue genaue Anzahl der Tage je nach Monat möchten, sollten Sie eine NSCalendar verwenden.

Sie können auch auf ebenso schöne Antwort in der gleichen Post beziehen von Hasnat:

könnte ein besserer Weg, dies zu schreiben, aber hier, was kam ich NSCalendar Vorschlag auf Bens und Arbeits von dort nach NSDateComponents

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[[NSDate alloc] init]]; 

[components setHour:-[components hour]]; 
[components setMinute:-[components minute]]; 
[components setSecond:-[components second]]; 
NSDate *today = [cal dateByAddingComponents:components toDate:[[NSDate alloc] init] options:0]; //This variable should now be pointing at a date object that is the start of today (midnight); 

[components setHour:-24]; 
[components setMinute:0]; 
[components setSecond:0]; 
NSDate *yesterday = [cal dateByAddingComponents:components toDate: today options:0]; 

components = [cal components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[[NSDate alloc] init]]; 

[components setDay:([components day] - ([components weekday] - 1))]; 
NSDate *thisWeek = [cal dateFromComponents:components]; 

[components setDay:([components day] - 7)]; 
NSDate *lastWeek = [cal dateFromComponents:components]; 

[components setDay:([components day] - ([components day] -1))]; 
NSDate *thisMonth = [cal dateFromComponents:components]; 

[components setMonth:([components month] - 1)]; 
NSDate *lastMonth = [cal dateFromComponents:components]; 

NSLog(@"today=%@",today); 
NSLog(@"yesterday=%@",yesterday); 
NSLog(@"thisWeek=%@",thisWeek); 
NSLog(@"lastWeek=%@",lastWeek); 
NSLog(@"thisMonth=%@",thisMonth); 
NSLog(@"lastMonth=%@",lastMonth); 

Hoffnung, dies hilft Ihnen.

+1

Im Allgemeinen steht die Antwort auf ihre eigenen Vorzüge. Wenn Ihre Antwort nicht akzeptiert wird, wird sie möglicherweise von einer anderen Person aktualisiert. – trudyscousin

+0

@trudyscousin: Ja das ist wahr ..:] –

2

Haha, du hast eine Menge Antworten, während ich an einigen anderen Dingen arbeitete, aber da ich es größtenteils fertiggestellt habe, hier ist es sowieso. Dieser Ansatz funktioniert auch über Zeitänderungen hinweg und bietet lokalisierte Tagnamen. (Wenn Sie Zeitwerte subtrahieren, wie in vielen anderen Beispielen, treten Probleme auf, wenn sich die Zeit ändert, wenn Sie sich dem Zeitwechsel nähern ....)

// Subtract one day from the current date (this compensates for daylight savings time, etc, etc.) 
- (NSDate *)dateBySubtractingOneDayFromDate:(NSDate *)date { 
    NSCalendar *cal = [NSCalendar currentCalendar]; 

    NSDateComponents *minusOneDay = [[NSDateComponents alloc] init]; 
    [minusOneDay setDay:-1]; 
    NSDate *newDate = [cal dateByAddingComponents:minusOneDay 
              toDate:date 
              options:NSWrapCalendarComponents]; 
    return newDate; 
} 

- (NSArray *)lastSevenDays { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"EEE"]; 

    NSDate *date = [NSDate date]; 
    NSMutableArray *weekDays = [[NSMutableArray alloc] initWithCapacity:8]; 
    for (int i = 0; i > -8; i--) { 
     NSString *weekDay = [formatter stringFromDate:date]; 
     [weekDays addObject:weekDay]; 
     date = [self dateBySubtractingOneDayFromDate:date]; 
    } 
    return weekDays; 
} 


// To use it, do this: 
NSLog(@"%@", [self lastSevenDays]); 
/* 
* Results: 
* (
*  Fri, 
*  Thu, 
*  Wed, 
*  Tue, 
*  Mon, 
*  Sun, 
*  Sat, 
*  Fri 
*) 
* 
*/ 
Verwandte Themen