Reputation: 790
Hi Im trying to limit my date Picker values within a particular Period of time as per my Backend Response. I refer many Links but nothing helps me, here is my code.
datePicker.datePickerMode = .time
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let today = dateFormatter.string(from: Date())
let preprTime = UserDefaults.standard.string(forKey: "PREPARATION_TIME")!
let start = UserDefaults.standard.string(forKey: "START_TIME")!
let end = UserDefaults.standard.string(forKey: "END_TIME")!
//Prints--> preprTime = 30 Mins., start = 08:00:00, end = 23:00:00
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss z"
let startDt = dateFormatter.date(from: "\(today) \(start) z")
let endDt = dateFormatter.date(from: "\(today) \(end) z")
//Prints--> startDt = 2017-11-02 08:00:00 +0000, endDt = 2017-11-02 23:00:00 +0000
let mins = preprTime.trimmingCharacters(in: CharacterSet(charactersIn: "01234567890").inverted)
let startTime: Date = startDt!.addingTimeInterval(TimeInterval(Int(mins)! * 60))
let endTime: Date = endDt!.addingTimeInterval(-(TimeInterval(Int(mins)! * 60)))
//Prints--> startTime = 2017-11-02 08:30:00 +0000, endTime = 2017-11-02 22:30:00 +0000
datePicker.minimumDate = startTime
datePicker.maximumDate = endTime
//Prints--> datePicker.minimumDate = 2017-11-02 08:30:00 +0000, datePicker.maximumDate = 2017-11-02 22:30:00 +0000
I Think I almost done, it prints the correct values, but the datePicker's Minimum and maximum dates are not set properly. Which means the datePicker's minimumDate(time) is today 2.00 PM and maximumDate(time) is today 11.59 PM. I dont know where im doing mistake, can someone help me to trigger this...? Thanks in Advance....!
Upvotes: 0
Views: 478
Reputation: 1855
Try adjusting your mimimumDate and maximumDate based on the difference in timezone
The difference is
let gmtDiff = TimeZone.current.secondsFromGMT()
My timezone is +5:30, so I need to subtract it from start and end time
var startDt = dateFormatter.date(from: "\(today) \(start) z")
startDt = startDt?.addingTimeInterval( -TimeInterval(gmtDiff))
var endDt = dateFormatter.date(from: "\(today) \(end) z")
endDt = endDt?.addingTimeInterval( -TimeInterval(gmtDiff))
Upvotes: 0