Swift: 从当前时间倒计时到某个时间

Swift: Countdown from current time till a certain time

我正在尝试计算从现在(即 Date())到下一个下午 5 点的时间。

如果当前时间是下午 3 点,输出将为 02:00:00。 (在 HH:MM:SS)

如果当前时间是下午 6 点,输出将为 23:00:00。 (直到下一个下午 5 点!)

如何在 Swift 3 中做到这一点?

谢谢。

您可以使用 Calendar.nextDate 查找即将到来的下午 5 点的日期。

let now = Date()
let calendar = Calendar.current
let components = DateComponents(calendar: calendar, hour: 17)  // <- 17:00 = 5pm
let next5pm = calendar.nextDate(after: now, matching: components, matchingPolicy: .nextTime)!

然后,使用 dateComponents(_:from:to:).

计算 next5pmnow 之间的差异
let diff = calendar.dateComponents([.hour, .minute, .second], from: now, to: next5pm)
print(diff)
// Example outputs:
//  hour: 2 minute: 21 second: 39 isLeapMonth: false 
//  hour: 23 minute: 20 second: 10 isLeapMonth: false 
func tommorrow5() ->Date {
var todayAt5 = Calendar.current.dateComponents([.year,.month,.day,.hour], from: Date() )
todayAt5.hour = 17
let dateToDisplay = Calendar.current.date(from: todayAt5)
return Calendar.current.date(byAdding: .day , value: 1, to: dateToDisplay!)! }


func showTimeDifference()->DateComponents{
var todayAt5 = Calendar.current.dateComponents([.year,.month,.day,.hour], from: Date() )
todayAt5.hour = 17
let dateToDisplay = Calendar.current.date(from: todayAt5)
let now = Date()
switch now.compare(dateToDisplay!) {

case .orderedAscending : // now is earlier than 5pm

    return Calendar.current.dateComponents([Calendar.Component.hour, Calendar.Component.minute, Calendar.Component.second], from: Date(), to: dateToDisplay!)

case .orderedDescending : // now is later than 5 pm

    return Calendar.current.dateComponents([Calendar.Component.hour, Calendar.Component.minute, Calendar.Component.second], from: Date(), to: tommorrow5())
case .orderedSame : break // now is 5 pm
}


return Calendar.current.dateComponents([Calendar.Component.hour, Calendar.Component.minute, Calendar.Component.second], from: Date(), to: dateToDisplay!)

}

你可以这样使用 return 时间到今天下午 5 点 如果已经过了下午 5 点,return 时间到明天下午 5 点

showTimeDifference()