【问题标题】:How to subtract 30 minutes from a timeinterval in Swift?如何从 Swift 中的时间间隔中减去 30 分钟?
【发布时间】:2019-06-12 08:00:11
【问题描述】:

我制作了一个带有 datePicker 和 2 个按钮的应用程序 - “签入”和“签出”。我以小时和分钟为单位计算了两个时间戳之间的时间。 现在我想从那个时间间隔中减去 30 分钟,如果“签到”在 12:00 之前。

这是我目前的代码:

var start = Date()

var end = Date()

class ViewController: UIViewController {

@IBOutlet weak var timeWheel: UIDatePicker!
@IBOutlet weak var workLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func checkIn(_ sender: Any) {
    start = timeWheel.date
    workLabel.text = ""
}

@IBAction func checkOut(_ sender: Any) {
    end = timeWheel.date
    let difference = Calendar.current.dateComponents([.hour, .minute], from: start, to: end)
    workLabel.text = "\(difference.hour ?? 0) timer og \(difference.minute ?? 0) minutter"
}
}

有什么建议吗?

【问题讨论】:

  • 不明白这个问题。请举例说明。
  • 我需要从时差中减去 30 分钟,如果“checkIn”在上午 12:00 之前 - 所以如果 checkIn 是 8:00 并且 checkOut 是 15:00 - 时差应该是6小时30分钟(工作时间减去午休时间)

标签: swift datepicker nstimeinterval


【解决方案1】:

在计算差值之前,获取starthour 分量并检查它是否小于12。如果是,则减去30 分钟,然后进行数学运算

@IBAction func checkOut(_ sender: Any) {
    end = timeWheel.date
    let calendar = Calendar.current
    let startHour = calendar.component(.hour, from: start)
    let startDate = startHour < 12 ? calendar.date(byAdding: .minute, value: 30, to: start)! : start
    let difference = calendar.dateComponents([.hour, .minute], from: startDate, to: end)
    workLabel.text = "\(difference.hour!) timer og \(difference.minute!) minutter"
}

强制展开组件非常好,因为两个组件都被明确要求。

【讨论】:

  • 但如果我将签入设置为 8:00,签出设置为 15:15,结果是 7 小时 45 分钟 - 这不是安静的权利:(
  • 8:00 - 0:30 是 7:30 和 15:15 - 7:30 是 7:45
  • 我找到了解决方案!通过添加 30 分钟开始 - 它给出了正确的结果 所以从 8:00 到 15:00 它给了我 6 小时 30 分钟,但从 13:00 到 15:00 给了我 2 小时 0 分钟谢谢: )
  • 我的错,我看错了从开始日期减去您必须添加到开始日期的 30 分钟。我更新了答案。
  • 你能解释一下这一行吗:“ let startDate = startHour
猜你喜欢
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2023-03-23
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多