【问题标题】:How to calculate days, hours, minutes from now to certain date in swift如何快速计算从现在到某个日期的天数、小时数、分钟数
【发布时间】:2019-05-28 06:17:46
【问题描述】:

快速计算到另一个日期的天数、小时数、分钟数和秒数。

我已经尝试使用 swifts datecomponents 往返函数,但它返回的天数不正确。

@objc func createCountdown(){
    let date = Date()
    let calendar = Calendar.current

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

    let currentDate = calendar.date(from: components)

    let userCalendar = Calendar.current

    var birthdayDate = DateComponents()
    //Get user's birthday
    birthdayDate.month = 4
    birthdayDate.day = 16
    birthdayDate.hour = 0
    birthdayDate.minute = 0


    let birthday = userCalendar.date(from: birthdayDate as DateComponents)


    let BirthdayDifference = calendar.dateComponents([.day, .hour, .minute, .second], from: currentDate!, to: birthday!)

    let daysLeft = BirthdayDifference.day
    let hoursLeft = BirthdayDifference.hour
    let minutesLeft = BirthdayDifference.minute
    let secondsLeft = BirthdayDifference.second

    daysLabel.text = String(daysLeft!)
    hoursLabel.text = String(hoursLeft!)
    minutesLabel.text = String(minutesLeft!)
    secondsLabel.text = String(secondsLeft!)
}

代码中的测试日期是生日值。我只是想从当前日期开始对指定的生日进行一天、小时、分钟和秒的倒计时。

此输出为 74 天,但显然从今天 2018 年 12 月 31 日到 4 月 16 日 2019 年 4 月 16 日超过了 74 天。这大约是 105 天,而不是 74 天。非常感谢任何建议。

谢谢。

【问题讨论】:

    标签: swift


    【解决方案1】:

    您需要根据生日的日期和月份找出下一个出生日期。你可以使用Calendar的方法nextDate(after: Date, matching: DateComponents)

    func nextDate(after date: Date, matching components: DateComponents, matchingPolicy: Calendar.MatchingPolicy, repeatedTimePolicy: Calendar.RepeatedTimePolicy = default, direction: Calendar.SearchDirection = default) -> Date?
    

    let birthDateCoponents = DateComponents(month: 4, day: 16)
    let nextBirthDate = Calendar.current.nextDate(after: Date(), matching: birthDateCoponents, matchingPolicy: .nextTime)!
    
    let difference = Calendar.current.dateComponents([.day, .hour, .minute, .second], from: Date(), to: nextBirthDate)
    
    difference.day     // 105
    difference.hour    // 2
    difference.minute  // 5
    difference.second  // 30
    

    当向用户显示它时,您可以将 DateComponentsFormatter 与适当的unitsStyle 一起使用。您可以在下面看到使用.full 样式并将单位限制为.day, .hour, .minute, .second 时的样子:

    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [.day, .hour, .minute, .second]
    
    formatter.unitsStyle = .full
    formatter.string(from: Date(), to: nextBirthDate)  // "105 days, 1 hour, 44 minutes, 36 seconds"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2023-03-11
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多