You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于HealthKit获取的睡眠数据计算睡眠时长

实现方案

你拿到的HealthKit睡眠样本均为带时区偏移的ISO 8601标准时间格式,用moment可以直接解析计算,无需额外做格式转换:

  1. 首先按需求过滤睡眠类型,HealthKit的睡眠数据分为INBED(卧床时长)和ASLEEP(实际睡眠时长)两类,可通过value字段筛选:
// 示例:筛选所有卧床记录
const targetRecords = results.filter(item => item.value === 'INBED')
  1. 用moment.diff方法计算单条记录的时间差,支持自定义返回单位:
const getRecordDuration = (record) => {
  const start = moment(record.startDate)
  const end = moment(record.endDate)
  // 以小时为单位,保留小数位,传入false则返回整数小时
  return end.diff(start, 'hours', true)
  // 若需返回分钟单位,改为 end.diff(start, 'minutes')
}
  1. 累加所有记录的时长得到总时长:
const totalDuration = targetRecords.reduce((sum, record) => {
  return sum + getRecordDuration(record)
}, 0)

注意事项

  • moment会自动识别时间字符串的时区偏移,无需手动处理跨时区、跨天的计算逻辑,示例中22点到次日9点的记录计算结果会直接返回11小时
  • 若你需要分别统计深浅睡时长,可查看HealthKit返回样本的额外分类字段,不同设备上报的分类维度可能有差异,可按需调整过滤规则

内容的提问来源于stack exchange,提问作者Daniel Döbereiner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:36:01