如何向 NSDate 添加周数?
How to add a number of weeks to an NSDate?
我过去曾使用以下函数使用 NSDateComponents
添加特定时间间隔到现有日期。
(NSDate *)dateByAddingComponents:(NSDateComponents *)comps
toDate:(NSDate *)date
options:(NSCalendarOptions)opts
从 iOS8 开始,NSDateComponents
的周值已弃用,这意味着我无法实现我想做的事情:通过添加一定数量的给定 NSDate
周。
如有任何帮助,我们将不胜感激。
更新:正如 Zaph 在他的回答中所说,Apple 实际上建议使用 weekOfYear
或 weekOfMonth
而不是我提供的答案。详情请查看 Zaph 的回答。
您可能很快就会意识到自己想多了,但是即使周值已被弃用,您也可以通过以下方式向日期添加特定周数,例如:
NSDateComponents *comp = [NSDateComponents new];
int numberOfDaysInAWeek = 7;
int weeks = 3; // <-- this example adds 3 weeks
comp.day = weeks * numberOfDaysInAWeek;
NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
您可以通过以下方法在 NSDate 上添加分类:
- (NSDate *) addWeeks:(NSInteger)weeks
{
NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components=[[NSDateComponents alloc] init];
components.day = weeks * 7;
return [gregorian dateByAddingComponents:components toDate:self options:0];
}
只需使用 weekOfYear
:
Apple 文档 NSDateComponents
week
:
Deprecation Statement
Use weekOfYear or weekOfMonth instead, depending on what you intend.
NSDate *date = [NSDate date];
NSDateComponents *comp = [NSDateComponents new];
comp.weekOfYear = 3;
NSDate *date1 = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
NSLog(@"date: %@", date);
NSLog(@"date1: %@", date1);
输出:
date: 2015-01-13 04:06:26 +0000
date1: 2015-02-03 04:06:26 +0000
如果您使用 week
,您会收到此警告:
'week' is deprecated: first deprecated in ... - Use weekOfMonth or weekOfYear, depending on which you mean
当使用 weekOfMonth
或 weekOfYear
作为增量时,它们的工作原理相同。它们的不同之处在于,当它们用于获取周数时,您将获得范围为 6 的月份中的周数或范围为 53 的年中的周数。
我更喜欢使用 dateByAddingUnit。更直观
return [NSDate[[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitMonth value:3 toDate:toDate options:0];
我过去曾使用以下函数使用 NSDateComponents
添加特定时间间隔到现有日期。
(NSDate *)dateByAddingComponents:(NSDateComponents *)comps
toDate:(NSDate *)date
options:(NSCalendarOptions)opts
从 iOS8 开始,NSDateComponents
的周值已弃用,这意味着我无法实现我想做的事情:通过添加一定数量的给定 NSDate
周。
如有任何帮助,我们将不胜感激。
更新:正如 Zaph 在他的回答中所说,Apple 实际上建议使用 weekOfYear
或 weekOfMonth
而不是我提供的答案。详情请查看 Zaph 的回答。
您可能很快就会意识到自己想多了,但是即使周值已被弃用,您也可以通过以下方式向日期添加特定周数,例如:
NSDateComponents *comp = [NSDateComponents new];
int numberOfDaysInAWeek = 7;
int weeks = 3; // <-- this example adds 3 weeks
comp.day = weeks * numberOfDaysInAWeek;
NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
您可以通过以下方法在 NSDate 上添加分类:
- (NSDate *) addWeeks:(NSInteger)weeks
{
NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components=[[NSDateComponents alloc] init];
components.day = weeks * 7;
return [gregorian dateByAddingComponents:components toDate:self options:0];
}
只需使用 weekOfYear
:
Apple 文档 NSDateComponents
week
:
Deprecation Statement
Use weekOfYear or weekOfMonth instead, depending on what you intend.
NSDate *date = [NSDate date];
NSDateComponents *comp = [NSDateComponents new];
comp.weekOfYear = 3;
NSDate *date1 = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
NSLog(@"date: %@", date);
NSLog(@"date1: %@", date1);
输出:
date: 2015-01-13 04:06:26 +0000 date1: 2015-02-03 04:06:26 +0000
如果您使用 week
,您会收到此警告:
'week' is deprecated: first deprecated in ... - Use weekOfMonth or weekOfYear, depending on which you mean
当使用 weekOfMonth
或 weekOfYear
作为增量时,它们的工作原理相同。它们的不同之处在于,当它们用于获取周数时,您将获得范围为 6 的月份中的周数或范围为 53 的年中的周数。
我更喜欢使用 dateByAddingUnit。更直观
return [NSDate[[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitMonth value:3 toDate:toDate options:0];