iOS 目标 C - 获取特定日期的 NSDate



我已经坚持使用NSDate计算,任何帮助将不胜感激。 提前谢谢。 以下是Objective-C中的功能需求

如何获取特定日期的NSDate(对于选择日期,我有从星期一到星期日的复选框(。

我将选择开始日期,即从选择器视图中选择NSDate,例如我选择了16-08-17。

然后将输入天数计数,例如 10 天。

然后我将选择带有复选框的日子,即我将在周一至周日有 7 个复选框,为期 7 天。 例如,我选择了星期三和星期四(选择"星期三"将是强制性的,因为开始日期 16-08-17 是星期三(。

如果我点击保存操作,则必须计算结束日期(结束日期在 NSDate 中(10 天到 16-08-17。这里的主要逻辑是 10 天只会是周三和周六,所以必须计算结果为 20-09-17。

16-08-2017 Wed
19-08-2017 Sat
23-08-2017 Wed
26-08-2017 Sat
02-09-2017 Wed
06-09-2017 Sat
13-09-2017 Wed
16-09-2017 Sat
20-09-2017 Wed
23-09-2017 Sat

如果天数为 9 天,则结果应为 20-09-2017。

NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateFormatter *sdateFormatter = [[NSDateFormatter alloc] init];
[sdateFormatter setDateFormat:@"dd/MM/yyyy"];
NSDate *sdate=[sdateFormatter dateFromString:anstrdate];
NSDateComponents *weekdayComponents = [gregorian components:NSCalendarUnitWeekday fromDate:sdate];
NSInteger todayWeekday = [weekdayComponents weekday];
enum Weeks {
SUNDAY = 1,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
};
NSInteger days = 0;
if([anstartdate isEqualToString:@"Sunday"])
{
days=1;
sundaySelected=YES;
atleastOneSelected= YES;
}
if([anstartdate isEqualToString:@"Monday"])
{
mondaySelected=YES;
atleastOneSelected= YES;
days=2;
}
if([anstartdate isEqualToString:@"Tuesday"])
{
tuesdaySelected=YES;
atleastOneSelected= YES;
days=3;
}
if([anstartdate isEqualToString:@"Wednesday"])
{
wednesdaySelected=YES;
atleastOneSelected= YES; 
days=4;
}
if([anstartdate isEqualToString:@"Thursday"])
{
thursdaySelected=YES;
atleastOneSelected= YES;
days=5;
}
if([anstartdate isEqualToString:@"Friday"])
{
fridaySelected=YES;
atleastOneSelected= YES;
days=6;
}
if([anstartdate isEqualToString:@"Saturday"])
{
sundaySelected=YES;
atleastOneSelected= YES;
days=7;
}
NSString *str=self.andaysTxt.text;
NSInteger noofdays=[str integerValue];
NSInteger moveDays=days-todayWeekday;
while (moveDays<=0) {
moveDays+=((noofdays-1)*7);
}
NSDateComponents *components = [NSDateComponents new];
components.day=moveDays;
NSCalendar *calendar=[[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];
NSDate* newEndDate = [calendar dateByAddingComponents:components toDate:sdate options:0];
NSLog(@"%@",newEndDate);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/yyyy"];
_anendDateTxt.placeholder=@"End Date";
self.anendDateTxt.text = [formatter stringFromDate:newEndDate];
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateFormatter *sdateFormatter = [[NSDateFormatter alloc] init];
[sdateFormatter setDateFormat:@"dd/MM/yyyy"];
NSDate *sdate=[sdateFormatter dateFromString:anstrdate];
NSDateComponents *weekdayComponents = [gregorian components:NSCalendarUnitWeekday fromDate:sdate];
NSInteger todayWeekday = [weekdayComponents weekday];
enum Weeks {
SUNDAY = 1,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
};
NSInteger days = 0;
if([anstartdate isEqualToString:@"Sunday"])
{
days=1;
sundaySelected=YES;
atleastOneSelected= YES;
}
if([anstartdate isEqualToString:@"Monday"])
{
mondaySelected=YES;
atleastOneSelected= YES;
days=2;
}
if([anstartdate isEqualToString:@"Tuesday"])
{
tuesdaySelected=YES;
atleastOneSelected= YES;
days=3;
}
if([anstartdate isEqualToString:@"Wednesday"])
{
wednesdaySelected=YES;
atleastOneSelected= YES; 
days=4;
}
if([anstartdate isEqualToString:@"Thursday"])
{
thursdaySelected=YES;
atleastOneSelected= YES;
days=5;
}
if([anstartdate isEqualToString:@"Friday"])
{
fridaySelected=YES;
atleastOneSelected= YES;
days=6;
}
if([anstartdate isEqualToString:@"Saturday"])
{
sundaySelected=YES;
atleastOneSelected= YES;
days=7;
}
NSString *str=self.andaysTxt.text;
NSInteger noofdays=[str integerValue];
NSInteger moveDays=days-todayWeekday;
while (moveDays<=0) {
moveDays+=((noofdays-1)*7);
}
NSDateComponents *components = [NSDateComponents new];
components.day=moveDays;
NSCalendar *calendar=[[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];
NSDate* newEndDate = [calendar dateByAddingComponents:components toDate:sdate options:0];
NSLog(@"%@",newEndDate);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/yyyy"];
_anendDateTxt.placeholder=@"End Date";
self.anendDateTxt.text = [formatter stringFromDate:newEndDate];

我想在循环中运行它,如果 18/08/2017 作为"星期五"的开始日期并且天数计数为"10",则仅选择一天,则选择一天结束日期计算为 20/10/2017。 如果选择多天,这是正确的,即 例如"星期五"和"星期六",结束日期应计算为 16/09/2017,因为第 10 天从 18/08/2017 开始于 16/09/2017 完成。

最新更新