以小时为单位获取两个日期之间的长度

Get the length between two dates in hours

我正在使用 react-native-healthkit 将睡眠数据读取到我的本机反应应用程序中,我需要找到一种方法来获取总睡眠时间。数据是这样读入的:

如果有人对处理这些数据的最佳方式有任何想法,请告诉我。

If anyone has any ideas on the best way to handle this data please let me know.

这实际上取决于您如何解析 JSON 数据。我不会在这里介绍 JSON 解析,因为有很多很多关于该主题的教程和博客文章。 Here's one 如果您不确定从哪里开始。

您的目标是结束日期对象(Date in Swift,NSDate in Objective-C)。例如,如果您将值作为字符串,则可以使用 DateFormatter 将字符串解析为 Date 个对象。

一旦您拥有了这些日期对象,您就可以使用这些对象提供的操作来获得 TimeInterval,这是一个 double,表示以秒为单位的时间间隔。通过除以 3600 将其转换为小时数:

let interval = endDate.timeIntervalSince(startDate)
let hours = interval / 3600
extension Date {

    /// Hours since current date to given date
    /// - Parameter date: the date
    func hours(since date: Date) -> Int {
        let calendar = Calendar.current
        let dateComponents = calendar.dateComponents([.hour], from: self, to: date)
        return dateComponents.month ?? 0
    }
}

date2.hours(since: date1)

使用 .timeIntervalSince 是一种不好的做法,因为有些时间可能比其他时间短。

试试这个

   let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    guard let startDate = dateFormatter.date(from: "yourStartDate"),
          let endDate = dateFormatter.date(from: "yourEndDate") else {
             return
        }
    let difference = endDate.timeIntervalSince(startDate)

如果您的目标是 iOS 13 岁及以上,您可以使用

endDate.hours(since: startDate)

代替时间间隔