日期倒计时。 Swift 3 和 Firebase

Countdown to a date. Swift 3 and Firebase

我想使用我的 Firebase 数据库,它具有产品的值,即寿命(整数而不是日期),并用它来比较用户添加项目的日期,即 25/03/ 17,我不确定如何实现这一点。有人可以给我一些建议吗?我相信这与近似值有关,所以如果 liespan 等于 7,那么用户应该看到 7 天并且每天都会减少,所以基本上是 countdown。我查看了 NSDate 文档和 SwiftDate 框架,对我可能需要使用的方法有一些了解。

我有这个例子,它获取订婚日期并将其与结婚日期进行比较,我认为这与我想要尝试实现的有点相似。但是,因为这使用了两个日期,而我想使用一个日期和一个整数:

    formatter.dateFormat = "dd/MM/yyyy"

    let dateArray = message["message"] as! NSMutableArray

    if let startTimeString = dateArray[0] as? String {
        let weddingDate = formatter.dateFromString(startTimeString)
        var engagementDate:NSDate? = nil

        if let endTimeString = dateArray[1] as? String {
            engagementDate = formatter.dateFromString(endTimeString)
        }
        let now = NSDate()
        let totalEngagementTime = userCalender.components(.Day, fromDate: engagementDate!, toDate: weddingDate!, options: []).day
        let daysFromEngagementUntilNow = userCalender.components(.Day, fromDate: engagementDate!, toDate: now, options: []).day
        let percentage = (Double(daysFromEngagementUntilNow) / Double(totalEngagementTime)) * 100.00
        let timeUntilWedding = userCalender.components(requestedComponent, fromDate: now, toDate: weddingDate!, options: [])

希望我说得有道理,提前谢谢你! :)

为了回应 OP 的评论,这回答了如何计算的问题

time between two dates

以及在 Firebase 上执行查询以检索现在和未来日期之间的事件。

给定一个 Firebase 结构来跟踪事件:

events
  event_0
    datestamp: "20170405"
    event_name: "A concert"
  event_1
    datestamp: "20170501"
    event_name: "Wine tasting"
  event_2
    datestamp: "20170410"
    event_name: "50th birthday"

假设今天是 20170402(2017 年 4 月 2 日),我们需要接下来 30 天的所有事件以及事件发生前的天数,当我们 运行 以下代码和查询时:

    let minuteInterval:TimeInterval = 60.0 //how to work with TimeIntervals
    let hourInterval:TimeInterval = 60.0 * minuteInterval
    let dayInterval:TimeInterval = 24 * hourInterval
    let sevenDaysInterval = dayInterval * 30 //30 days from now

    let today = Date() //today

    var futureDate = Date()
    futureDate.addTimeInterval(sevenDaysInterval) //future date is seven days from now

    let formatter = DateFormatter()
    formatter.dateFormat = "yyyyMMdd" //format the date to match how it's stored in Firebase
    let startString = formatter.string(from: today)
    let endString = formatter.string(from: futureDate)

    let eventsRef = self.ref.child("events")
    let myQuery = eventsRef.queryOrdered(byChild: "datestamp")
                                 .queryStarting(atValue: startString)
                                 .queryEnding(atValue: endString)
    myQuery.observeSingleEvent(of: .value, with: { snapshot in
        for child in snapshot.children {
            let snap = child as! FIRDataSnapshot
            let dict = snap.value as! [String: Any]
            let eventName = dict["event_name"] as! String
            let eventDateStampString = dict["datestamp"] as! String
            let endDate = formatter.date(from: eventDateStampString)
            let daysUntilEvent = self.daysDiff(startDate: today, endDate: endDate!)

            print("event: \(eventName)  days from now: \(daysUntilEvent)")
        }
    })

还有一些函数可以计算日期的差异

func daysDiff(startDate: Date, endDate: Date) -> Int {
    let calendar = Calendar.current

    let date1 = calendar.startOfDay(for: startDate)
    let date2 = calendar.startOfDay(for: endDate)

    let a = calendar.dateComponents([.day], from: date1, to: date2)
    return a.value(for: .day)!
}

结果是

event: A concert  days from now: 3
event: 50th birthday  days from now: 8
event: Wine tasting  days from now: 29