iOS Swift - 从 Firebase 中的日期范围查询值

标签 ios swift firebase firebase-realtime-database

我正在制作一个考勤应用程序,我试图显示登录时间、注销时间和休息时间等日期范围内的值。例如,用户选择从 2017 年 9 月 23 日到 2017 年 9 月 25 日的日期,应用应显示这些日期的登录时间、注销时间、休息时间等列表。

这是我的代码:

    databaseHandle = ref.child("admin").child(userID!).child("employees").child(self.employeeInfo!).child("attendance").queryOrdered(byChild: fromDateTimeStamp!).queryEnding(atValue: toDateTimeStamp).observe(.childAdded, with: { (snapshot) in

        for item in snapshot.children {
            let snap = item as! DataSnapshot
            let key = snap.key
            let value = snap.value

            print("key: \(key), value: \(value!)")
        }

    })

    ref.removeObserver(withHandle: databaseHandle!)

我选择了 9/23/2017 到 9/25/2017 因为在 9/24/2017 没有登录和注销,这是我尝试查询时得到的:

    key: breakFinish, value: 12:17 PM
    key: breakStart, value: 11:55 AM
    key: currentDate, value: 9/23/2017
    key: login, value: 11:51 AM
    key: logout, value: 1:00 PM
    key: scanCount, value: 4
    key: breakFinish, value: 10:19 AM
    key: breakStart, value: 10:19 AM
    key: currentDate, value: 9/25/2017
    key: login, value: 10:18 AM
    key: logout, value: 10:21 AM
    key: scanCount, value: 4

现在,我的问题是如何循环遍历 snapshot.children 或访问单个值以使用它?因为我要将这些数据导出到一个 csv 文件中。所以当我这样做时,我希望它像这样显示:

    Date          Login        Break Start     Break Finish      Logout
    9/23/2017     11:51 AM     11:55 AM        11:55 AM          1:00 PM
    9/25/2017     11:51 AM     11:55 AM        11:55 AM          1:00 PM

我试过了,但找不到值时会报错。

    let attendanceDict = snapshot.value as? [String:AnyObject]

        if let actualAttendanceDict = attendanceDict {

            for each in actualAttendanceDict {

                let dateKey = each.key
                self.dateKeyArray += [dateKey]
                let dateLogin = each.value["currentDate"] as! String
                self.dateLoginArray += [dateLogin]
                let timeInTime =  each.value["login"] as! String
                self.loginTimeArray += [timeInTime]
                let timeOutTime = each.value["logout"] as! String
                self.logoutTimeArray += [timeOutTime]
                let breakStartTime = each.value["breakStart"] as! String
                self.breakStartTimeArray += [breakStartTime]
                let breakFinishTime =  each.value["breakFinish"] as! String
                self.breakFinishTimeArray += [breakFinishTime]



            }
        }

请帮忙。谢谢!

最佳答案

诀窍是在 for 循环内部转换为字典:

databaseHandle = ref.child("admin").child(userID!).child("employees").child(self.employeeInfo!).child("attendance").queryOrdered(byChild: fromDateTimeStamp!).queryEnding(atValue: toDateTimeStamp).observe(.childAdded, with: { (snapshot) in

    for item in snapshot.children {
        let snap = item as! DataSnapshot
        let dateKey = snap.key
        let attendanceDict = snap.value as? [String:AnyObject]

        self.dateKeyArray += [dateKey]
        let dateLogin = attendanceDict["currentDate"] as! String
        self.dateLoginArray += [dateLogin]
        let timeInTime =  attendanceDict["login"] as! String
        self.loginTimeArray += [timeInTime]
        let timeOutTime = attendanceDict["logout"] as! String
        self.logoutTimeArray += [timeOutTime]
        let breakStartTime = attendanceDict["breakStart"] as! String
        self.breakStartTimeArray += [breakStartTime]
        let breakFinishTime =  attendanceDict["breakFinish"] as! String
        self.breakFinishTimeArray += [breakFinishTime]
    }

})

关于iOS Swift - 从 Firebase 中的日期范围查询值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46398281/

相关文章:

ios - swift 3 : retrieving text from a UITextField in a custom UITableViewCell

ios - 调整 UIButton 的 imageView 属性

ios - Alamofire 请求自行更改方法名称

firebase - 在 npm 上使用 firebase 部署时出错 --prefix $RESOURCE_DIR run lint

ios - Locale 在 iOS 模拟器中返回错误的货币符号

ios - 我可以为 Core Plot 散点图的范围设置动画吗?

Swift 类型推断在扩展中被破坏了吗?

ios - 如何将图像限制在 iPhone X 上 View Controller 的底部(主页指示器下方)

android - 如何在 Firestore 中一次创建/更新多个文档

使用 FCM 的 IOS 数据通知