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)