0

我正在做一个需要检查与第一次发布日期的时差的项目。我正在使用 NSDayCalendarUnit 和 NSWeekCalendarUnit。基本上在前两周的每一天,我都想做一些事情。我正在使用的对象需要一次每两天处于某种状态。

所以例如

Day 1 & 2, Week 0 - State 1
Day 3 & 4, Week 0 - State 2
...
Day 1 & 2, Week 1 - State 8
Day 3 & 4, Week 1 - State 9

这是我的代码:

    // get the data/time difference from the first launch
    int daysDifferent = [[dateDifferenceInfo objectForKey:@"days"] intValue];
    int weeksDifferent = [[dateDifferenceInfo objectForKey:@"weeks"] intValue];

    if(daysDifferent == 2 | daysDifferent == 3 && !weeksDifferent && _dot.age != 2){
        // set state
    }

    if(daysDifferent == 4 | daysDifferent == 5 && !weeksDifferent && _dot.age != 3){
        // set state
    }
    if((daysDifferent == 6 && weeksDifferent == 0 | daysDifferent == 0 && weeksDifferent == 1) && _dot.age != 4){
       // set state
    }

    if(daysDifferent == 0 | daysDifferent == 1 && weeksDifferent == 1 && _dot.age != 5){
       // set state
    }

    if(daysDifferent == 2 | daysDifferent == 3 && weeksDifferent == 1  && _dot.age != 6){
      // set state   
    }

    if(daysDifferent == 4| daysDifferent == 5 && weeksDifferent == 1  && _dot.age != 7){
      // set state   
    }

    if((daysDifferent == 6 && weeksDifferent == 1 | daysDifferent == 0 && weeksDifferent == 2)  && _dot.age != 8){
      // set state
    }

    if(weeksDifferent >= 2 && !(daysDifferent % 2)){
      // set state
    }

旁注:我知道这是不好的代码,我打算用 switch case 替换它,我只需要先进行逻辑排序。

我的问题是有没有更好的方法来计算这种模式?

4

1 回答 1

0

正如您所说,我对您的目标并不完全清楚:

在前两周的每一天,我都想做一些事情。

所以例如

Day 1 & 2, Week 0 - State 1
Day 3 & 4, Week 0 - State 2
...
Day 1 & 2, Week 1 - State 8
Day 3 & 4, Week 1 - State 9

我原以为会在哪里

Day 1 & 2, Week 0 - State 1
Day 3 & 4, Week 0 - State 2
Day 5 & 6, Week 0 - State 3
Day 7 Week 0 & Day 1 Week 1 - State 4.
...

因此,如果您的示例正确,则计算方式不同。

基于更简单的示例,我将计算自第一次约会以来的时间间隔,然后除以一天长度的两倍,然后发言。那就是状态:

NSDate *firstDate = ...
NSDate *secondDate = ...
NSTimeInterval interval = [ secondDate timeIntervalSinceDate: firstDate ];
double secondsPerDay = 60 * 60 * 24.0; // s per min times min per hr times hrs per dy. 
int state = (int) (interval / secondsPerDay * 0.5 ) + 1; 

另一方面,如果确实如您所描述的那样,那么我将使用的快速和简单的方法是进行类似的计算 - 在最后一行中省略 0.5 因子,然后使用简单的表查找从当天获取状态:

int table[ 14 ] = { 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8 };
int state = table[ (int) (interval / secondsPerDay ) ]; 
于 2012-04-11T12:15:02.643 回答