在 objective-c 中获取一周的第一天和最后一天
Get first day of week and last day in objective-c
我想获取本周的第一天,每个人都有特定的语言环境。
例如在美国一周从周日开始,其他国家从周一开始。
我想从星期一开始为大家服务,这是因为我想将其用于 SQLQuery。
我有这个:
NSDate *weekDay = [NSDate date]; //any date in the week in which to calculate the first or last weekday
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:weekDay];
[components setDay:([components day]-([components weekday]-[[NSCalendar currentCalendar] firstWeekday]))];
NSDate *firstWeekday = [gregorian dateFromComponents:components];
NSDate *lastWeekday = [[gregorian dateFromComponents:components] dateByAddingTimeInterval:7 * 24 * 3600 - 1];
NSLog(@"first - %@ \nlast - %@", firstWeekday, lastWeekday);
如果在您的语言环境中,周从星期一开始,但如果从星期日开始,这就没有问题 return 我想要的。
假设今天是 2015 年 10 月 11 日
星期日语言环境将 return 一周的第一天 11,最后一天 17
使用星期一语言环境将 return 第 5 周的第一天,最后一天 11
我想 return 在我的应用执行的任何地方使用第二个选项。
谢谢。
最好的问候。
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
cal.firstWeekday = 2;// set first week day to Monday
// 1: Sunday, 2: Monday, ..., 7:Saturday
NSDate *now = [NSDate date];
NSDate *startOfTheWeek;
NSDate *endOfWeek;
NSTimeInterval interval;
[cal rangeOfUnit:NSCalendarUnitWeekOfYear
startDate:&startOfTheWeek
interval:&interval
forDate:now];
//startOfTheWeek holds the beginning of the week
endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval - 1];
// endOfWeek now holds the last second of the last week day
[cal rangeOfUnit:NSCalendarUnitDay
startDate:&endOfWeek
interval:NULL
forDate:endOfWeek];
// endOfWeek now holds the beginning of the last week day
测试:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateStyle = NSDateFormatterShortStyle;
formatter.timeStyle = NSDateFormatterShortStyle;
NSLog(@"start: %@", [formatter stringFromDate:startOfTheWeek]);
NSLog(@"end: %@", [formatter stringFromDate:endOfWeek]);
打印
start: 12.10.15, 00:00
end: 18.10.15, 00:00
所以星期一是一周的开始
如果我设置
cal.firstWeekday = 1;
它将打印
start: 11.10.15, 00:00
end: 17.10.15, 00:00
星期日是一周的第一天
我想获取本周的第一天,每个人都有特定的语言环境。 例如在美国一周从周日开始,其他国家从周一开始。
我想从星期一开始为大家服务,这是因为我想将其用于 SQLQuery。
我有这个:
NSDate *weekDay = [NSDate date]; //any date in the week in which to calculate the first or last weekday
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:weekDay];
[components setDay:([components day]-([components weekday]-[[NSCalendar currentCalendar] firstWeekday]))];
NSDate *firstWeekday = [gregorian dateFromComponents:components];
NSDate *lastWeekday = [[gregorian dateFromComponents:components] dateByAddingTimeInterval:7 * 24 * 3600 - 1];
NSLog(@"first - %@ \nlast - %@", firstWeekday, lastWeekday);
如果在您的语言环境中,周从星期一开始,但如果从星期日开始,这就没有问题 return 我想要的。
假设今天是 2015 年 10 月 11 日 星期日语言环境将 return 一周的第一天 11,最后一天 17 使用星期一语言环境将 return 第 5 周的第一天,最后一天 11
我想 return 在我的应用执行的任何地方使用第二个选项。
谢谢。 最好的问候。
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
cal.firstWeekday = 2;// set first week day to Monday
// 1: Sunday, 2: Monday, ..., 7:Saturday
NSDate *now = [NSDate date];
NSDate *startOfTheWeek;
NSDate *endOfWeek;
NSTimeInterval interval;
[cal rangeOfUnit:NSCalendarUnitWeekOfYear
startDate:&startOfTheWeek
interval:&interval
forDate:now];
//startOfTheWeek holds the beginning of the week
endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval - 1];
// endOfWeek now holds the last second of the last week day
[cal rangeOfUnit:NSCalendarUnitDay
startDate:&endOfWeek
interval:NULL
forDate:endOfWeek];
// endOfWeek now holds the beginning of the last week day
测试:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateStyle = NSDateFormatterShortStyle;
formatter.timeStyle = NSDateFormatterShortStyle;
NSLog(@"start: %@", [formatter stringFromDate:startOfTheWeek]);
NSLog(@"end: %@", [formatter stringFromDate:endOfWeek]);
打印
start: 12.10.15, 00:00
end: 18.10.15, 00:00
所以星期一是一周的开始
如果我设置
cal.firstWeekday = 1;
它将打印
start: 11.10.15, 00:00
end: 17.10.15, 00:00
星期日是一周的第一天