Как получить и отобразить разницу между двумя разами, используя два UIDatePickers в Swift 5 - PullRequest
0 голосов
/ 07 апреля 2020

Я новичок в Swift и пытаюсь вычислить разницу во времени между 2 UIDatePickers основным пользовательским интерфейсом приложения .

Я хочу, чтобы пользователь мог выбирать затем нажмите кнопку, и отображаемая разница во времени появится в «ярлыке», например, пользователь выбирает 5:00 вечера и 11:00 вечера, он будет показывать 6:00 или 6 примерно так. Я не уверен, как я должен go делать это. Как (picker1 - picker2) может быть? пока в моем коде у меня есть:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var picker1: UIDatePicker!

@IBOutlet weak var picker2: UIDatePicker!

@IBOutlet weak var lable1: UILabel!


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

@IBAction func buttontap(_ sender: Any) {      

} 

}

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Используйте DateComponents, чтобы выяснить разницу между двумя датами:

let date1 = picker1.date
let date2 = picker2.date

let diff = Calendar.current.dateComponents([.hour, .minute], from: date1, to: date2)
print("\(diff.hour!), \(diff.minute!)")

0 голосов
/ 07 апреля 2020

Это вычисляет расстояние между двумя датами, затем отображает часы и минуты. Он игнорирует секунды, но если вам нужны также секунды, вы сможете следовать той же схеме, что и я.

let firstDate = picker1.date
let secondDate = picker2.date
let timeInBetween = secondDate.timeIntervalSince(secondDate) //this is in seconds

var hours = 0
var minutes = 0
var seconds = timeInBetween
while seconds >= 3600 {
    seconds -= 3600
    hours += 1
}
while seconds >= 60 {
    seconds -= 60
    minutes += 1
}

lable1.text = "\(hours) hour\(hours == 1 ? "" : "s"), \(minutes) minute\(minutes == 1 ? "" : "s")."

РЕДАКТИРОВАТЬ: Хотя это решение работает, я предлагаю всем, кто ищет решение, вместо этого использует решение @ Gereon. Однако вам нужно будет обновить текст метки, и мой способ сделать это все еще является лучшим вариантом.

...