根据开始日期和当前日期在一个周期中选择一天

时间:2012-03-26 18:53:52

标签: objective-c date cycle

应用允许用户定义一组任意天,如下所示:

  • 第1天 - 摘花
  • 第2天 - 喝咖啡
  • 第3天 - 去游泳

这一天可能只有一个条目,也可能有很多条目。假设这个周期从2010年3月23日开始。

是否有一种通用算法可以确定周期中哪一天与给定日历日相对应?

3月24日,算法应该返回第2天,3月25日应该是第3天,3月26日应该是第1天,依此类推......

更具体地说,我正在为Cocoa应用程序编写此代码。那么,除非有一种更通用的技术,日历课程能帮助我吗?

3 个答案:

答案 0 :(得分: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现在包含自开始日期以来经过的天数。这可以用作您的活动数组的索引(从零开始)。您可以使用模数运算符将循环的长度作为被除数,以便在第一次循环运行后计算指数。

答案 1 :(得分:1)

计算开始日期和当前日期的Julian date(或变体)(此部分留给读者练习)。然后,周期的当前日期为(currentDate - startDate) % lengthOfCycle + 1

答案 2 :(得分:0)

输入后我找到了答案,这很简单。

计算开始日期和当前日期之间的天数,然后将该数字取模为周期中的总天数,并获得当天。容易发脾气。