如何在 objective c 中获取周数的开始和结束日期

How to get start and end dat for week number in objective c

在我的 iOS 应用中,我有一个周数,我需要获取该周数的开始和结束日期。

我正在构建一个应用程序,公司经理可以使用该应用程序跟踪员工的工作时间。这些工作时间在自定义 Registration 对象中每天处理。 在此对象中,存储日期、开始时间、结束时间和休息时间,并根据这些值计算工作时间。

然后,所有 Registration 对象都存储在一个 WorkWeek 对象中,其中包含周数和注册数组。 WorkWeek 是根据周数构建的,运行 从周一到周日。在这个WorkWeek对象中,计算了总工作时间、加班时间和工资。

很明显,如果 Workweek 不是从星期一到星期五的 运行 整周,我就无法可靠地计算额外的时间。当用户选择从我的数据库中获取 mont 的所有注册时,尤其会发生这种情况。一个月不会从星期一开始,也不会在恰好四个星期后的星期日结束,所以我正在处理不可靠的周对象。

总结

为了确保我在我的应用程序中显示的信息是可靠的,我需要确定某一周(例如第 1 周或第 52 周)是否包含至少 7 天,如果不是,我需要设置一个布尔值到 FALSE 然后触发通知我的用户。

如何根据周数获取一周的开始和结束日期?

这显示了它是如何完成的:

NSCalendar *cal = [NSCalendar currentCalendar];

// Start of week:
NSDateComponents *comp = [[NSDateComponents alloc] init];
comp.weekday = cal.firstWeekday;
comp.weekOfYear = 1; // <-- fill in your week number here
comp.year = 2015;    // <-- fill in your year here
NSDate *startOfWeek = [cal dateFromComponents:comp];

// Add 6 days:
NSDate *endOfWeek = [cal dateByAddingUnit:NSCalendarUnitDay value:6 toDate:startOfWeek options:0];

// Show results:
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateStyle = NSDateFormatterShortStyle;
NSLog(@"%@", [fmt stringFromDate:startOfWeek]);
NSLog(@"%@", [fmt stringFromDate:endOfWeek]);

一些注意事项:

  • cal.firstWeekday 给出第一个工作日的语言环境相关索引,例如 2 = Monday 在德国,或 1 = Sunday 在 U.S。根据您的需要, 您也可以在此处使用常量值。
  • 可能需要设置cal.minimumDaysInFirstWeek,比较一下 NSDateFormatter reports June 2, 2013 as being in week zero.
  • dateByAddingUnit:... 方法在 OS X 10.9 或更高版本中可用。 或者,使用 dateByAddingComponents:....
  • 我假设你使用公历,所以一周有 7 天。 或者,您可以加一周,然后减去一天。