Abirami Bala
Abirami Bala

Reputation: 790

Setting particular Interval of time for DatePicker (Minimum and Maximum Time) Swift 3

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

Answers (1)

Rikesh Subedi
Rikesh Subedi

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

Related Questions