【发布时间】:2020-10-31 18:37:30
【问题描述】:
我希望我的 swift 代码倒计时到最近的时间点。因此,如果时间为 146,则用户代码应倒计时 14 分钟。现在我下面的代码倒计时到特定的日期和时间。我只是希望它在应用程序运行时倒计时到最近的小时。
import UIKit
class ViewController: UIViewController {
@IBOutlet var timerLabel: UILabel!
var timer: Timer!
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(UpdateTime), userInfo: nil, repeats: true)
}
@objc func UpdateTime() {
let userCalendar = Calendar.current
// Set Current Date
let date = Date()
let components = userCalendar.dateComponents([.hour, .minute, .month, .year, .day], from: date)
let currentDate = userCalendar.date(from: components)!
// Set Event Date
var eventDateComponents = DateComponents()
eventDateComponents.year = 2021
eventDateComponents.month = 01
eventDateComponents.day = 01
eventDateComponents.hour = 01
eventDateComponents.minute = 00
eventDateComponents.timeZone = TimeZone(abbreviation: "GMT")
let eventDate = userCalendar.date(from: eventDateComponents)!
let timeLeft = userCalendar.dateComponents([.day, .hour, .minute, ], from: currentDate, to: eventDate)
timerLabel.text = "\(timeLeft.day!)d \(timeLeft.hour!)h \(timeLeft.minute!)m "
endEvent(currentdate: currentDate, eventdate: eventDate)
}
func endEvent(currentdate: Date, eventdate: Date) {
if currentdate >= eventdate {
timerLabel.text = "Happy New Year!"
// Stop Timer
timer.invalidate()
}
}
}
编辑/更新:
我在我的 swift 代码中的目标是到达时间的顶部。在尝试实现@Leo 的答案后,它会打印“Top of Hour”,但问题是它只执行一次。只要应用程序处于打开状态,我希望它每小时打印一次“Top of Hour”。所以我需要重置结束日期,这是我试图在
让日期 = Date() 结束 = date.nextHour
这不会让代码编译。所以我必须将 end var 重置为下一个小时。
【问题讨论】:
-
您所要做的就是每秒钟而不是每分钟运行一次时钟,以查看当前日期并在分钟为 0 时按铃。
-
我对原帖做了一些改动。立即尝试
标签: swift date calendar nsdateformatter nsdatecomponentsformatter