【问题标题】:How to show 7 days from current date in ios if today is last day of the month如果今天是本月的最后一天,如何在 ios 中显示当前日期的 7 天
【发布时间】:2016-11-02 06:35:28
【问题描述】:

我在 datepickerview 中显示一个月的 7 天。

但我的问题是如果今天的当前日期是该月的最后一天,如何显示当前日期的 7 天。

示例:假设今天的月份是六月,六月有 30 天,所以今天的日期是 30。那么我的问题是如何显示从当前日期开始的下 6 天,意味着在日期选择器中我想要 6 月 30 日、7 月 1 日、7 月 2 日、7 月 3 日, 7 月 4 日,7 月 5 日,7 月 6 日。

请建议我如何解决这个问题。我还提供了代码,请建议我的代码哪里做错了。

NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [NSDateComponents new];
    comps.day = 7;

    NSDate *sevenDays = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];
    ActionSheetDatePicker *datePicker = [[ActionSheetDatePicker alloc] initWithTitle:@"Select Date" datePickerMode:UIDatePickerModeDate selectedDate:[NSDate date] minimumDate:[NSDate date] maximumDate:sevenDays target:self action:@selector(timeWasSelected:element:) origin:sender];

【问题讨论】:

  • 你可以投票赞成我的回答。这将有助于其他 SO 用户搜索和解决类似的问题..

标签: ios objective-c xcode uidatepicker nsdatecomponents


【解决方案1】:

您可以通过以下代码行计算接下来的 7 天:

NSDate *sevenDays = [[NSDate date] dateByAddingTimeInterval:60*60*24*7];

然后您可以在 DatePicker 中使用您的以下代码。

ActionSheetDatePicker *datePicker = [[ActionSheetDatePicker alloc] 
    initWithTitle:@"Select Date" datePickerMode:UIDatePickerModeDate 
    selectedDate:[NSDate date] minimumDate:[NSDate date] 
    maximumDate:sevenDays target:self 
    action:@selector(timeWasSelected:element:) origin:sender];

希望这会对您有所帮助。

如果您对此有任何疑问,请添加评论。

编码愉快!!!

【讨论】:

  • 切勿使用 86400 进行日历计算。如果在间隔期间夏令时发生变化,您可能会出现意外行为。
  • @vadian 是的,它是正确的.. 感谢您的建议。我认为他只想在 Picker 中显示日期,而不是循环使用 86400。提问者,如果您在任何其他地方使用,请考虑夏令时。
  • @Sandeep 如果对您有帮助,请作为答案。
【解决方案2】:

代码似乎是正确的,也许问题出在您使用的第三方选择器上?尝试使用 UIDatePicker 编写代码,看看是否能得到想要的结果,如果是,则意味着 ActionSheetDatePicker 有一些问题......

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [NSDateComponents new];
comps.day = 7;

NSDate *sevenDays = [calendar dateByAddingComponents:comps toDate:  [NSDate date] options:0];

下面的代码在 UIDatePicker 中看起来像这样......_datePicker 是 iboutlet UIDatePicker

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [NSDateComponents new];
comps.day = 7;

NSDate *sevenDays = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];
[_datePicker setMinimumDate:[NSDate date]];
[_datePicker setMaximumDate:sevenDays];

在使用上述代码的 UIDatePicker 中,如果用户滚动到上一个日期选择器将自动设置为今天的日期,如果用户滚动到第 10 个选择器,7 月 7 日将自动设置为 7 月 7 日

【讨论】:

    【解决方案3】:
    NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
    dayComponent.day = 1;
    
    NSCalendar *theCalendar = [NSCalendar currentCalendar];
    NSDate *nextDate = [theCalendar dateByAddingComponents:dayComponent toDate:[NSDate date] options:0];
    
    NSLog(@"nextDate: %@ ...", nextDate);
    

    据此,您可以计算出第二天的平均值,如果今天是 30,那么第二天就是 1,因此您可以使用 for 循环并运行它七次,而不是接下来的 7 天

    【讨论】:

      【解决方案4】:

      这将创建一个数组 nextSevenDays,其中包含包括今天在内的接下来的 7 天。

      NSCalendar *calendar = [NSCalendar currentCalendar];
      NSDate *startDate = [calendar startOfDayForDate:[NSDate date]];
      NSMutableArray<NSDate*> * nextSevenDays = [[NSMutableArray alloc] init];
      for (NSInteger i = 0; i < 7; i++) {
        [nextSevenDays addObject:[calendar dateByAddingUnit:NSCalendarUnitDay value: i toDate: startDate options: NSCalendarMatchNextTime]];
      }
      NSLog(@"%@", nextSevenDays);
      

      要获取从现在起 7 天后的日期,请使用

      NSCalendar *calendar = [NSCalendar currentCalendar];
      NSDate *startDate = [calendar startOfDayForDate:[NSDate date]];
      NSDate *sevenDaysFromNow = [calendar dateByAddingUnit:NSCalendarUnitDay value: 7 toDate: startDate options: NSCalendarMatchNextTime];
      NSLog(@"%@", sevenDaysFromNow);
      

      【讨论】:

        【解决方案5】:
        for (int i = 0; i < 7; i ++)
        {
            NSCalendar *calendar = [NSCalendar currentCalendar];
            NSDateComponents *comps = [NSDateComponents new];
            comps.day =i;
            NSDate *sevenDays = [calendar dateByAddingComponents:comps toDate:objDate.date options:0];
            [dateFormatter setDateFormat:@"dd/MM/yy"];
        
            NSString *str = [dateFormatter stringFromDate:sevenDays];
            NSLog(@"str : %@",str);
        }
        

        希望这段代码对你有帮助:)

        【讨论】:

          猜你喜欢
          • 2017-01-31
          • 1970-01-01
          • 1970-01-01
          • 2018-04-14
          • 1970-01-01
          • 1970-01-01
          • 2013-07-23
          • 1970-01-01
          相关资源
          最近更新 更多