swiftfscalendar

Getting correct date from FSCalendar


I have been looking around a lot but found no real solution to this one.

I use FSCalendar and didSelectDate is giving the wrong date.

The only fix for this that I've found is using this code that I'm using right now:

func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {        
    let newDate = date.addingTimeInterval(TimeInterval(TimeZone.current.secondsFromGMT(for: date)))
        currentDateVc = newDate
    }

This means if I choose the 22th in February I get "2022/02/22 - 00:00:00", here is the issue, I get the correct day but not time. And in my app I need the correct time as well. Is there anyway I can fix this? Maybe with CalendarComponents for time from Date()?


Solution

  • You'll need to compose the date from FSCalendar and the current datetime to make a new Date. One way to do this:

    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
        let now = Date()
        let cal = Calendar.current
    
        let newDate = cal.date(bySettingHour: cal.component(.hour, from: now),
                                      minute: cal.component(.minute, from: now),
                                      second: cal.component(.second, from: now),
                                          of: date)!
    
        currentDateVc = newDate
    }
    

    Side note: It's better to use features of the calendar/datetime library to get your local time instead of adding seconds from GMT to your date time data. You'll avoid mysterious errors in the future.