天/小时/分钟/秒的快速倒数计时器标签

时间:2015-10-13 22:24:19

标签: ios swift datetime nsdate nstimer

我创建了倒计时器,该计时器倒计时到NSDate中设置的UIDatePicker。我有一个标签,显示我们倒计时的日期,并且工作正常。

我还试图添加的是剩余的整天数和当天剩余的小时/分钟/秒数(即从不超过23/59/59)的标签。这里'我现在所做的一切,但它显然显示了整个倒计时的价值。希望有人可以帮我在这里找出正确的逻辑。

let secondsLeft = sender.date.timeIntervalSinceDate(NSDate())
hoursLabel.text = String(secondsLeft % 3600)
minutesLabel.text = String((secondsLeft / 60) % 60)
secondsLabel.text = String(secondsLeft % 60)

我想我正在寻找的是你在php中获得的datetime类的快速等价

3 个答案:

答案 0 :(得分:10)

得到它 - 对于 Swift 2

let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Day, .Hour, .Minute, .Second], fromDate: NSDate(), toDate: sender.date, options: [])
daysLabel.text = String(components.day)
hoursLabel.text = String(components.hour)
minutesLabel.text = String(components.minute)
secondsLabel.text = String(components.second)

答案 1 :(得分:1)

看看NSCalendar类。具体看一下方法 components:fromDate:toDate:options:这使您可以使用您指定的任何单位获取2个日期并计算它们之间的差异。

它也是可本地化的,因此如果您使用当前日历并且用户使用中文,希伯来文或阿拉伯语日历,那么计算将为您提供正确的日历结果。

答案 2 :(得分:0)

这是Chris Byatt的答案的Swift 4版本,它也适用于游乐场:

import UIKit

let calendar = Calendar.current
let now = Date()
let futureDate = Date.distantFuture

let components = calendar.dateComponents([.day, .hour, .minute, .second], from: now, to: futureDate)

let daysLabel = UILabel()
let hoursLabel = UILabel()
let minutesLabel = UILabel()
let secondsLabel = UILabel()

daysLabel.text = String(describing: components.day)
hoursLabel.text = String(describing: components.hour)
minutesLabel.text = String(describing: components.minute)
secondsLabel.text = String(describing: components.second)

print(components) // day: 723942 hour: 23 minute: 56 second: 0 isLeapMonth: false

// Bonus: here's an easy way to print grammatically correct labels based on numbers
if let seconds = components.second {
    let labelText = "\(seconds) \(seconds == 1 ? "second" : "seconds")"
    print(labelText) // 0 seconds, 1 second, 2 seconds, etc.
}