【问题标题】:Setting particular Interval of time for DatePicker (Minimum and Maximum Time) Swift 3为 DatePicker(最小和最大时间)Swift 3 设置特定的时间间隔
【发布时间】:2017-11-02 13:46:26
【问题描述】:

您好,我试图根据我的后端响应将我的日期选择器值限制在特定时间段内。我参考了很多链接,但没有任何帮助,这是我的代码。

    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

我想我差不多完成了,它打印了正确的值,但是 datePicker 的最小和最大日期设置不正确。这意味着 datePicker 的 minimumDate(time) 是今天 2.00 PM,maximumDate(time) 是今天 11.59 PM。我不知道我在哪里做错了,有人可以帮我触发这个...? 在此先感谢....!

【问题讨论】:

  • 我认为,您面临区域设置问题,打印日期显示 +0000,它看起来像 UTC 时间,我的建议是在计算 startTime 和 endTime 之前将日期更改为当前区域设置。
  • @DipakKacha,你能分享任何示例代码

标签: ios swift datepicker


【解决方案1】:

尝试根据时区差异调整您的 mimimumDate 和 maximumDate

区别是

let gmtDiff = TimeZone.current.secondsFromGMT()

我的时区是 +5:30,所以我需要从开始时间和结束时间中减去它

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))

【讨论】:

  • 对不起,我无法告诉你我该如何实现这个......?你能用代码进行编辑吗..
  • 嗨,当我在模拟器上运行时它工作正常,而在设备上运行时它会崩溃 ---> let startDt = dateFormatter.date(from: "(today) (start) z ") 在这一行我得到零值。你能帮帮我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
相关资源
最近更新 更多