我的问题由NSDateComponents解决,但我想理解为什么这个方法有效
ionic cordova run android
结果是:
NSDate *today = [NSDate date];
NSLog(@"today is: %@", today);
NSDate *dayChanged = [calendar dateBySettingUnit:(NSCalendarUnitDay)
value:10
ofDate:today
options:0];
NSLog(@"dayChanged is: %@", dayChanged);
NSDate *monthChanged = [calendar dateBySettingUnit:(NSCalendarUnitMonth)
value:5
ofDate:today
options:0];
NSLog(@"monthChanged is: %@", monthChanged);
为什么today is: 2016-09-30 06:40:36 +0000
dayChanged is: 2016-10-10 00:00:00 +0000
monthChanged is: 2017-05-01 00:00:00 +0000
会增加下一个更大的单位?
答案 0 :(得分:1)
有趣的是,dateBySettingUnit
的行为可能是出乎意料的"因为所有组件实际上都绑定在一起。根据{{1}}头文件文档(强调我的):
此处的具体行为尚未明确;例如,如果我 将工作日更改为星期四,这是否会进入下一个工作日, 回到上一个,或到最近的星期四?可能的规则 是算法会尝试产生一个结果 下一个更大的单位到给定的那个(那里是这个映射的表格 本文档的顶部)。所以对于"设置为星期四"例如,找到 给定日期所在的星期四(可能 是向前或向后移动,而不一定是最近的 星期四)。对于前进或后退行为,可以使用 -nextDateAfterDate:matchingUnit:value:options:上面的方法。
因此,根据您的需要,使用NSCalendar
可能更合适。
答案 1 :(得分:1)
根据观察,dateBySettingUnit does not return past date
因此,对于使用dateBySettingUnit
进行快速测试设置以便将来日期按预期工作,请参阅以下代码:
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *today = [NSDate date];
NSLog(@"today is: %@", today);
NSDate *dayChanged = [calendar dateBySettingUnit:(NSCalendarUnitDay)
value:31
ofDate:today
options:NSCalendarWrapComponents];
NSLog(@"dayChanged is: %@", dayChanged);
NSDate *monthChanged = [calendar dateBySettingUnit:(NSCalendarUnitMonth)
value:12
ofDate:dayChanged
options:NSCalendarWrapComponents];
NSLog(@"monthChanged is: %@", monthChanged);
日志:
2016-09-30 12:58:30.506 TestRegex[3785:72957] today is: 2016-09-30 07:58:30 +0000
2016-09-30 12:58:30.508 TestRegex[3785:72957] dayChanged is: 2016-09-30 19:00:00 +0000
2016-09-30 12:58:30.509 TestRegex[3785:72957] monthChanged is: 2016-11-30 19:00:00 +0000
您可以尝试在实际计算偏移量的链接答案中提到的NSCalendar扩展名,或者您可以使用NSDateComponents
溶液:
NSDateComponents *comps = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:today];
[comps setCalendar:calendar];
[comps setDay:5];
希望有所帮助!