2016-02-05 17 views
-1

我试着改变我的函数,得到一天/一天结束NSDates几次,我知道循环正在工作BC它打印出本周的权利天,但由于某种原因,每天的start_timestamp和end_timestamp都显示相同。它必须是一些涉及INT不改变什么不直接相关的逻辑IM没有看到:Ints在天的循环中继续重复的所有天

这里是它的打印输出:

WEEK_ARRAY:{ 
    Friday =  { 
     "DAY_END" = 1454389199; 
     "DAY_START" = 1454302800; 
    }; 
    Monday =  { 
     "DAY_END" = 1454389199; 
     "DAY_START" = 1454302800; 
    }; 
    Saturday =  { 
     "DAY_END" = 1454389199; 
     "DAY_START" = 1454302800; 
    }; 
    Sunday =  { 
     "DAY_END" = 1454389199; 
     "DAY_START" = 1454302800; 
    }; 
    Thursday =  { 
     "DAY_END" = 1454389199; 
     "DAY_START" = 1454302800; 
    }; 
    Tuesday =  { 
     "DAY_END" = 1454389199; 
     "DAY_START" = 1454302800; 
    }; 
    Wednesday =  { 
     "DAY_END" = 1454389199; 
     "DAY_START" = 1454302800; 
    }; 
} 

这里的逻辑:

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

    NSDate *date = [NSDate date]; 
    NSMutableDictionary *weekDays = [[NSMutableDictionary alloc] init]; 
    for (int i = 0; i <7; i++) { 
     NSString *weekDay = [formatter stringFromDate:date]; 
     date = [self dateByAddingOneDayFromDate:date]; 
     NSMutableDictionary *specificDayDict=[[NSMutableDictionary alloc]init]; 

     NSDate *StartNSDate=[self beginningOfDay:date]; 

     NSNumber *StartTstamp=[NSNumber numberWithInt:[self convertNSDateToTimestamp:StartNSDate]]; 


     int endOfDay=[self convertNSDateToTimestamp:[self endOfDay:date]]; 

     NSLog(@"DAY:%@ | DAY_START:%@ | DAY_END:%d",weekDay,StartTstamp,endOfDay); 

     [specificDayDict setValue:StartTstamp forKey:@"DAY_START"]; 
     [specificDayDict setValue:[NSNumber numberWithInt:endOfDay] forKey:@"DAY_END"]; 
     [weekDays setObject:specificDayDict forKey:weekDay]; 
    } 
    return weekDays; 
} 
- (NSDate *)dateByAddingOneDayFromDate:(NSDate *)date { 
    NSCalendar *cal = [NSCalendar currentCalendar]; 

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

-(NSDate *)beginningOfDay:(NSDate *)date 
{ 
    NSCalendar *cal = [NSCalendar currentCalendar]; 
    NSDateComponents *components = [cal components:(NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:date]; 

    [components setHour:0]; 
    [components setMinute:0]; 
    [components setSecond:0]; 

    return [cal dateFromComponents:components]; 

} 

-(NSDate *)endOfDay:(NSDate *)date 
{ 
    NSCalendar *cal = [NSCalendar currentCalendar]; 
    NSDateComponents *components = [cal components:(NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:date]; 

    [components setHour:23]; 
    [components setMinute:59]; 
    [components setSecond:59]; 

    return [cal dateFromComponents:components]; 

} 

-(NSDate *)convertTimestampToNSDate:(int)timestamp{ 

    NSDate* date = [NSDate dateWithTimeIntervalSince1970:timestamp]; 

    return date; 
} 
-(int)convertNSDateToTimestamp:(NSDate *)date{ 

    int timestamp=[date timeIntervalSince1970]; 
    return timestamp; 
} 
+1

哇,这是一个很大的代码。我相信它的大部分可能会被抛弃。例如,为什么每天都需要调用'beginningOfDay:'方法,以便能够在今天开始并每次迭代减去一整天? – trojanfoe

+0

请不要判断,3点。我只是在寻找一个答案。我重复这么多?!?! – ChuckKelly

+2

“不要判断”Heheh。你来错了地方。 – trojanfoe

回答

2

原因是在这两个beginningOfDayendOfDay方法缺少NSDayCalendarUnit组件。

+0

这工作的时间戳,但现在我意识到日子不是为了某种原因?请参阅星期五,星期一,星期六,星期日的日志吗? – ChuckKelly

+0

这是因为字典根据定义无序。如果您想保留订单,请使用数组并将星期几添加到字典中。 – vadian

0

在beginningOfDay和endOfDay函数中,您错过了NSCalendarUnitDay。另外NSMonthCalendarUnit,NSYearCalendarUnit在ios8中已弃用。

-(NSDate *)beginningOfDay:(NSDate *)date{ 
NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDateComponents *components = [cal components:(NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitDay| NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:date]; 

[components setHour:0]; 
[components setMinute:0]; 
[components setSecond:0]; 

return [cal dateFromComponents:components]; 

} 

-(NSDate *)endOfDay:(NSDate *)date{ 
NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDateComponents *components = [cal components:(NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitDay| NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:date]; 

[components setHour:23]; 
[components setMinute:59]; 
[components setSecond:59]; 

return [cal dateFromComponents:components]; 

}

+2

这与其他答案并无太大区别。您应该已将有关弃用的评论添加到其他答案。 – trojanfoe