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

React Native获取应用使用时长出现Bug,求助本地时间相关问题

问题诊断与解决方案

核心问题:时间区间计算逻辑错误

你当前的时间初始化逻辑存在漏洞,导致实际统计的时间范围和需求的「本地当日0点至当前时间」不匹配,这是和系统数字健康数据差异极大的主要原因。

你的代码试图通过UTC时间反推本地0点,但逻辑绕错了:

const startDate = new Date();
startDate.setUTCHours(18,15,0,0); // Set to midnight in UTC
startDate.setUTCDate(startDate.getUTCDate() - 1);//This is used to set date to previous day as I am currently in Nepal and NST is UTC+5:45
const endDate= new Date()

这段代码的问题在于:先把当前日期的UTC小时设为18:15,再把UTC日期减1,会导致当本地时间处于跨UTC日期的时段时,计算出的startDate完全偏离预期。比如本地是当日凌晨1点(对应UTC前一天19:15),代码会把UTC日期再减1,得到UTC前前一天的18:15,对应本地前一天的0点,完全不符合需求。

正确的时间区间计算方式

直接基于本地时间构造当日0点,再转换成UTC时间戳(Android原生UsageStatsManager接口默认使用UTC时间范围,封装包通常遵循这一规则),逻辑更清晰且无偏差:

// 构造本地当日0点的时间对象
const todayLocal = new Date();
todayLocal.setHours(0, 0, 0, 0);

// 转换为UTC时间对象,适配包的时间范围要求
const startDate = new Date(todayLocal.toUTCString());
const endDate = new Date(); // 当前时间,包内部会自动处理为UTC时间

更简洁的写法(直接用时间戳传递):

const startOfDay = new Date();
startOfDay.setHours(0, 0, 0, 0);
const startTimestamp = startOfDay.getTime(); // 本地0点的时间戳
const endTimestamp = Date.now(); // 当前时间戳

额外排查点

  • 权限验证:确保已在AndroidManifest.xml中添加android.permission.PACKAGE_USAGE_STATS权限,且用户已在系统设置中给应用授予「使用情况访问权限」,无权限会导致返回数据不完整或错误。
  • 统计维度匹配:系统数字健康可能包含更细致的统计规则(比如区分前台/后台时长、合并临时活动),可以检查@brighthustle/react-native-usage-stats-manager的文档,确认是否有参数可调整统计维度,比如是否仅统计前台使用时长。

内容的提问来源于stack exchange,提问作者Susav Karki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:46:01