如何获得给定星期数和年份的首个和最后一个日期?

月亮星星

我是ios编程的新手,并且极力地尝试获取给定周的第一个和最后一个日期作为参考年份。

我试图建立一种方法,但确实得到了奇怪的日期。

+ (NSArray*)getStartDateOfWeek : (NSInteger)weekNumber withYear:(NSInteger)year {
    NSMutableArray *result = [[NSMutableArray alloc]init];

    // Week Start Date

    NSCalendar *gregorianStart = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *componentsStart = [[NSDateComponents alloc] init];


    [componentsStart setWeekOfYear:weekNumber];
    [componentsStart setYear:year];

    int startDayOfWeek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:[gregorianStart dateFromComponents:componentsStart]] weekday];
    [componentsStart setDay:([componentsStart day] - ((startDayOfWeek) - 2))];

    NSDate *beginningOfWeek = [gregorianStart dateFromComponents:componentsStart];

    // Week End Date

    NSCalendar *gregorianEnd = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDateComponents *componentsEnd = [[NSDateComponents alloc]init];
    [componentsStart setWeekOfYear:weekNumber];
    [componentsStart setYear:year];

    int endDayOfWeek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:[gregorianEnd dateFromComponents:componentsEnd]] weekday];

    [componentsEnd setDay:([componentsEnd day]+ (7 - endDayOfWeek) + 1)]; // for end day of the week

    NSDate *endOfWeek = [gregorianEnd dateFromComponents:componentsEnd];

    [result insertObject:beginningOfWeek atIndex:0];
    [result insertObject:endOfWeek atIndex:1];

    return result;
}

感谢您的任何帮助。

保尔11

假设您想要给定一周的星期天(第一天)和星期六(最后一天),此代码将完成您想要的操作(为清楚起见,我创建了两个方法,但是您可以将它们重新组合为一个)-

+ (NSDate *)firstDayOfWeek:(NSInteger)weekNumber inYear:(NSInteger)year
{
    NSDateComponents *comps=[[NSDateComponents alloc]init];
    [comps setWeekday:1];                                   //Change this to 2 if you want Monday rather than Sunday
    [comps setWeekOfYear:weekNumber];

    [comps setYear:year];
    [comps setYearForWeekOfYear:year];

    NSCalendar *cal=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDate *newDate=[cal dateFromComponents:comps];

    return newDate;

}

+ (NSDate *)lastDayOfWeek:(NSInteger)weekNumber inYear:(NSInteger)year
{
    NSDateComponents *comps=[[NSDateComponents alloc]init];
    [comps setWeekday:7];                                  //Change this to 6 if you want Friday rather than Saturday
    [comps setWeekOfYear:weekNumber];

    [comps setYear:year];
    [comps setYearForWeekOfYear:year];

    NSCalendar *cal=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDate *newDate=[cal dateFromComponents:comps];

    return newDate;

}

重要的一点是[comps setYearForWeekOfYear:year];-否则您可能会在第1周获得意外的结果-默认情况下,您将获得一年中的“最后”第1周,也就是次年的第1周,因此您的成绩要比您晚一年预期的。

如果您想将两者结合为一种方法,则可以使用-NSDictionary而不是NSArray-

 +(NSDictionary *)firstAndLastDayOfWeek:(NSInteger)weekNumber inYear:(NSInteger)year
    {
        NSDateComponents *comps=[[NSDateComponents alloc]init];
        [comps setWeekday:1];
        [comps setWeekOfYear:weekNumber];

        [comps setYear:year];
        [comps setYearForWeekOfYear:year];

        NSCalendar *cal=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

        NSDate *firstDay=[cal dateFromComponents:comps];

        [comps setWeekday:7];

        NSDate *lastDay=[cal dateFromComponents:comps];

        return @{@"firstDay":firstDay,@"lastDay":lastDay};

    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何只给定一个月,该月内的星期数和星期几的日期来计算日期

如何计算每个员工每个日期的首个事件和最后一个事件之间的差额

在特定的日期和年份获得第一个星期六

如何从星期数,天数和年份中获取日期?

如何在R中从日期获取星期数和年份

如何在JavaScript中获得年份的第一天和最后一个日期

获取Go中前3个月的首个和最后一个日期

获取具有给定月份和年份的星期数和工作日的日期

Python-从星期几,年份和星期数获取日期

从星期几,年份和星期数获取日期

每次在同一日期栏中更改价格后,如何选择首个日期和最后一个日期(加上一天)?

我如何从月份和年份中获取第一个日期和最后一个日期 |Excel |用于月份和年份的微调器|

在Python中找到任何给定年份的六月和十二月的最后一个营业日期

如何获得当年的第一个和最后一个日期?

如何在SQL Server中获取“完成年份”的星期数,开始日期和结束日期?

如何使用Python对每个ID的首个和最后一个审阅日期列进行分组,并使用python向前填充N / A值?

MYSQL给定星期和年份中星期一的日期,模式7

如果在PHP中同时具有年份和星期#(ISO-8601的星期数),如何获取日期?

如何在Java中获取连续的星期数和年份?

如何从给定的数值月份中获取月份的第一个和最后一个日期PHP

按给定日期获取上一个和下一个星期一的日期

如何使用MySQL获取两个日期之间的星期数和星期几

如何比较首个元素和最后一个元素以降序对数组进行排序

如何使用Google表格获取与上一年的星期数和星期几相同的日期?

如何在React Big Calendar中获得第一个和最后一个可见日期?

如何获得财务,全年每个月的第一个和最后一个日期

如何从一个日期的多次登录和注销中获得首次登录和最后一次注销?

TSQL-如何确定给定星期数的一周的第一天和最后一天

如何根据Moment.js中的星期数和年份获取星期的第一天?