Search code examples
iosswiftjtcalendar

How to set date limit in JTCalender?


I want to set date limit in JTCalender. As of now it shows dates more than of past year & more than a year ahead of current year. I want to set limit that it should show only dates of past 6 months & future 6 months. I am using swift language. Please suggest how to resolve this issue ?

EDIT: I am using below code in my app also.

func calendarDidLoadNextPage(_ calendar: JTCalendarManager!) {

    let formatter = DateFormatter()
    formatter.dateFormat = "MMMM yyyy"
    print("load next date \(calendar.date())")
    label_month.text = formatter.string(from: calendar.date()).uppercased()
    filterDate(cal_date: calendar.date())
  }

  func calendarDidLoadPreviousPage(_ calendar: JTCalendarManager!) {
    let formatter = DateFormatter()
    formatter.dateFormat = "MMMM yyyy"
    print("loading previous date is \(self.dateFormatter().string(from: calendar.date()))")
    label_month.text = formatter.string(from: calendar.date()).uppercased()
    filterDate(cal_date: calendar.date())
  }

Solution

  • You can create Max and Min Date as per your requirement and use JTCalendar's delegate method to limit the date of calendar.

    In your Interface

     NSDate *_todayDate;
     NSDate *_minDate;
     NSDate *_maxDate;
     @property (strong, nonatomic) JTCalendarManager *calendarManager;
    

    In implementation section, you can do below code.

    _calendarManager = [JTCalendarManager new];
    _calendarManager.delegate = self;
    
    _todayDate = [NSDate date];
    
    _minDate = [_calendarManager.dateHelper addToDate:_todayDate months:-6];
    
    _maxDate = [_calendarManager.dateHelper addToDate:_todayDate months:6];
    

    And A delegate method is there to limit the date for the calendar

    // Used to limit the date for the calendar, optional
    - (BOOL)calendar:(JTCalendarManager *)calendar canDisplayPageWithDate:(NSDate *)date
    {
        return [_calendarManager.dateHelper date:date isEqualOrAfter:_minDate andEqualOrBefore:_maxDate];
    }
    

    The problem is your condition in your delegate method.

    func calendar(_ calendar: JTCalendarManager!, canDisplayPageWith date: Date!) -> Bool {
    
        return (calendarManager?.dateHelper.date(minDate, isEqualOrAfter: maxDate))!
      }
    

    You are passing minDate to check isEqualorAfter to your maxDate. which will n ever be true.