To get total sleepcount for each day in swift

Viewed 135

I am fetching sleep data for last 7 days. And i am getting the indivisual data for each time it is recorded. Insead of getting all the data, i want to get total sleep count for all the 7 days.

let say i slepts at "8am" for 2 hrs, at "12pm" for 55mins and "4pm" for 1hr. so when i am fetching the data i am getting the data with start time and endtime . But here i want to get the total data for each day, means for today i will get the value as "3hr and 55 mins" according to the above example.

My code is-

    class func getSleepHours(completion: @escaping(_ result: [HKSample])-> Void)  {
    
    let typestoRead = Set([
        HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.sleepAnalysis)!
           ])
       
       let typestoShare = Set([
        HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.sleepAnalysis)!
           ])
   
    HKHealthStore().requestAuthorization(toShare: typestoShare, read: typestoRead) { (success, error) -> Void in
           if success == false {
               NSLog(" Display not allowed")
           }
       
            if let sleepType = HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.sleepAnalysis) {

                let formatter = DateFormatter()
                formatter.dateFormat = "yyyy/MM/dd HH:mm"

                let last7Days = Date.get7Dates(forLastNDays: 7)
                let today = Date()
                let yesterday = today - 7
//                let startDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date())!
                let startDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: yesterday)!

                let endDate = Date()

    //            let startDate = Date().yesterday
    //            let endDate = Date()

                //let starTDate = Date)


                let predciate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: .strictEndDate)

                let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false)
                let query = HKSampleQuery(sampleType: sleepType, predicate: predciate, limit: 100, sortDescriptors: [sortDescriptor]) { (query, tmpResult, error) -> Void in
                    
                    if let result = tmpResult {
                        completion(tmpResult!)
                       
                    }else{
                        print(error?.localizedDescription)
                    }
                }

                HKHealthStore().execute(query)
            }
    }
        }

Output is-

7 elements

  • 0 : 0 DC519C9A-A37E-429C-AA38-A5FB08693E86 "Health" (14.4), "iPhone13,4" (14.4)metadata: { HKWasUserEntered = 1; } (2021-04-07 05:59:00 +0530 - 2021-04-09 06:20:00 +0530)
  • 1 : 0 DC0FD5D1-3D16-48B3-AC80-CF5DC2E25FB6 "Health" (14.4), "iPhone13,4" (14.4)metadata: { HKWasUserEntered = 1; } (2021-04-09 05:41:00 +0530 - 2021-04-09 05:50:00 +0530)
  • 2 : 0 166675D2-5BE7-4EDA-816B-2767FBAAC266 "Health" (14.4), "iPhone13,4" (14.4)metadata: { HKWasUserEntered = 1; } (2021-04-09 04:33:00 +0530 - 2021-04-09 05:31:00 +0530)
  • 3 : 0 66E8E36C-D627-45D4-8656-BF22331BDAA2 "Health" (14.4), "iPhone13,4" (14.4)metadata: { HKWasUserEntered = 1; } (2021-04-09 03:21:00 +0530 - 2021-04-09 05:21:00 +0530)
  • 4 : 0 3C6C8B61-8552-4198-BD13-A9BC3C38982D "Health" (14.4), "iPhone13,4" (14.4)metadata: { HKWasUserEntered = 1; } (2021-04-09 02:14:00 +0530 - 2021-04-09 02:57:00 +0530)
  • 5 : 0 F48E3EF7-0703-47A0-B687-7AF6DA7F5374 "Health" (14.4), "iPhone13,4" (14.4)metadata: { HKWasUserEntered = 1; } (2021-04-09 00:08:00 +0530 - 2021-04-09 01:08:00 +0530)
  • 6 : 0 531A12AB-3960-41AF-87E1-2616461CA6EF "Health" (14.4), "iPhone13,4" (14.4)metadata: { HKWasUserEntered = 1; } (2021-04-08 23:15:00 +0530 - 2021-04-09 00:00:00 +0530)
0 Answers
Related