Ios 天数循环中的整数在所有天数内继续重复

Ios 天数循环中的整数在所有天数内继续重复,ios,objective-c,int,nsdate,nsnumber,Ios,Objective C,Int,Nsdate,Nsnumber,我已经尝试过多次更改获取一天开始/一天结束日期的函数,并且我知道循环正在工作,因为它打印出了一周中正确的几天,但是出于某种原因,每天的开始和结束时间戳显示相同。它必须是与int无关的东西,或者是与我看不到的逻辑没有直接关系的东西: 下面是它打印出来的内容: WEEK_ARRAY:{ Friday = { "DAY_END" = 1454389199; "DAY_START" = 1454302800; }; Monday =

我已经尝试过多次更改获取一天开始/一天结束日期的函数,并且我知道循环正在工作,因为它打印出了一周中正确的几天,但是出于某种原因,每天的开始和结束时间戳显示相同。它必须是与int无关的东西,或者是与我看不到的逻辑没有直接关系的东西:

下面是它打印出来的内容:

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;
}
逻辑如下:

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;
}
-(NSMutableDictionary*)最近七天{
NSDateFormatter*格式化程序=[[NSDateFormatter alloc]init];
[格式化程序setDateFormat:@“EEEE”];
NSDate*日期=[NSDate日期];
NSMutableDictionary*工作日=[[NSMutableDictionary alloc]init];

对于(int i=0;i而言,原因是
beginingofday
endOfDay
方法中缺少
NSDayCalendarUnit
组件。

在beginingofday和endOfDay函数中,您错过了NSCalendarUnitDay。此外,在ios8中也不推荐使用NSMonthCalendarUnit、NSYearCalendarUnit

-(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];

}

哇,代码太多了。我相信大部分都可以扔掉。例如,为什么每天都有一个
开始日期:
方法,而你可以从今天开始,每次迭代减去一整天?请不要判断,现在是凌晨3点。我只是在寻找答案。为什么重复这么多?!“不要判断”呵呵。你来错地方了。请不要。不要在凌晨3点写代码。如果你不那么累的话,明天整理代码所花的时间将比一开始写代码所花的时间要多。请看瓦迪安的帖子。这与另一个答案没有太大区别。你应该在另一个answ中添加一条关于不赞成的评论呃。这对时间戳有效,但现在我意识到由于某种原因,日期不符合顺序?查看日志,它给了我星期五、星期一、星期六、星期日?这是因为字典的定义是无序的。如果要保留顺序,请使用数组并将工作日添加到字典中。