Получить продолжительность между двумя датами в часах - PullRequest
0 голосов
/ 28 января 2020

Я читаю данные о сне в моем приложении-ответе, используя react-native-healthkit, и мне нужно найти способ получить общее количество времени сна. Данные читаются следующим образом:

js object

Если у кого-нибудь есть идеи относительно лучшего способа обработки этих данных, пожалуйста, дайте мне знать.

Ответы [ 3 ]

1 голос
/ 28 января 2020
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 является плохой практикой, поскольку некоторые часы могут быть короче других.

0 голосов
/ 28 января 2020

Попробуйте это

   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)

вместо timeInterval

0 голосов
/ 28 января 2020

Если у кого-то есть идеи относительно лучшего способа обработки этих данных, пожалуйста, дайте мне знать.

Это действительно зависит от того, как вы анализируете эти JSON данные. Я не буду описывать разбор JSON здесь, потому что есть много, много уроков и сообщений в блоге по этой теме c. Вот один на случай, если вы не знаете, с чего начать.

Ваша цель - получить объекты даты (Date в Swift, NSDate в Objective- C ). Например, если у вас есть значения в виде строк, вы можете использовать DateFormatter для разбора строк на Date объекты.

Получив эти объекты даты, вы можете использовать операции, которые эти объекты предоставляют для получения TimeInterval, то есть double, представляющий интервал в секундах. Переведите это в часы, разделив на 3600:

let interval = endDate.timeIntervalSince(startDate)
let hours = interval / 3600
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...