2012-03-26 6 views
0

Eine App ermöglicht es dem Benutzer eine beliebige Menge von Tagen zu definieren, etwa so:Wählen Sie einen Tag in einem Zyklus basierend auf einem Startdatum und dem aktuellen Datum

  • Tag 1 - Blumen pflücken
  • Tag 2 - haben Kaffee
  • Tag 3 - Go

Dieser Satz von Tagen Schwimmen nur einen Eintrag haben kann, oder es kann viele. Angenommen, dieser Zyklus von Tagen beginnt am 23. März 2010.

Gibt es einen allgemeinen Algorithmus, der bestimmen kann, welcher Tag in einem Zyklus einem bestimmten Kalendertag entspricht?

Am 24. März sollte der Algorithmus 2. Tag sollte März Tag 3, 26. sein 25. März zurückkehren sollte am Tag 1, und so sein ...

Genauer gesagt, die ich für eine diesen Code schreibe Kakao-Anwendung. Also, außer der Existenz einer allgemeineren Technik können die Kalender-Klassen mir helfen?

Antwort

3
NSCalendar *gregorian = ...; 
NSDate *startDate = ...; 
NSDate *currentDate = [NSDate date]; 
NSUInteger unitFlags = NSDayCalendarUnit; 
NSDateComponents *components = [gregorian components:unitFlags fromDate:startDate toDate:currentDate options:0]; 
NSInteger days = [components day]; 

days enthält nun die Anzahl der Tage, die seit dem Startdatum vergangen sind. Dies kann als ein Index (nullbasiert) in Ihrem Array von Aktivitäten verwendet werden. Sie können den Modulo-Operator mit der Länge des Zyklus als Dividend verwenden, um Indizes nach dem ersten Transit um den Zyklus zu berechnen.

+0

Vielen Dank für die Bereitstellung des Cocoa-Codes für die Arbeit mit den Daten, das ist sehr hilfreich. Sobald Sie "Tage" haben, können Sie diese Anzahl der Tage im Zyklus berechnen, um den richtigen Array-Index zu erhalten. – GloryFish

+1

In der Tat. Ich habe meine Antwort geändert, um diese Tatsache zu berücksichtigen. – warrenm

1

Berechnen Sie die Julian date (oder eine Variante) des Startdatums und das aktuelle Datum (Dieser Teil ist eine Übung für den Leser). Der aktuelle Tag des Zyklus ist dann (currentDate - startDate) % lengthOfCycle + 1.

+0

Das ist es. Eigentlich ziemlich einfach. Vielen Dank! :) – GloryFish

0

Nachdem ich dies eingegeben habe, habe ich die Antwort gefunden und es ist einfach.

Berechnen Sie die Anzahl der Tage zwischen dem Startdatum und dem aktuellen Datum, dann nehmen Sie diese Zahl modulo die Gesamtzahl der Tage im Zyklus und Sie haben den aktuellen Tag. Einfach pissy.

Verwandte Themen