【问题标题】:iOS Objective C - Getting NSDate of a particular dayiOS Objective C - 获取特定日期的 NSDate
【发布时间】:2017-08-16 09:32:25
【问题描述】:

我坚持使用 NSDate 计算,我们将不胜感激。提前致谢。以下是objective-c中的功能需求

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

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

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

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

如果我点击保存操作,必须计算结束日期(结束日期为 NSDate)10 天到 17 年 8 月 16 日。 这里是主要逻辑 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。

【问题讨论】:

  • 查看 NSDateComponents。您可以通过手动设置组件(日、月、年、小时、分钟等)来构建 NSDates。

标签: ios objective-c nsdate


【解决方案1】:
 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];

我想在循环中运行它,如果 2017 年 8 月 18 日作为“星期五”的开始日期并且天数为“10”结束日期计算为2017 年 10 月 20 日。如果选择多天是正确的,例如“星期五”和“星期六”,结束日期应计算为 2017 年 9 月 16 日,因为第 10 天从 2017 年 8 月 18 日到 2017 年 9 月 16 日完成。

【讨论】:

  • 我想循环运行,上面的代码只有在我选择了一天时才起作用,如果 18/08/2017 作为“星期五”的开始日期并且天数是“10”结束日期计算为 20/10/2017。如果选择多天是正确的,例如“星期五”和“星期六”,结束日期应计算为 2017 年 9 月 16 日,因为从 2017 年 8 月 18 日起,第 10 天将在 2017 年 9 月 16 日完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多