Expo中如何设置指定日期时间触发的调度通知
Expo 指定日期时间触发本地通知实现方法
你不需要手动计算当前时间到目标时间的秒数差,Expo 通知接口原生支持绝对时间触发配置,直接替换trigger参数的配置项即可。
核心配置逻辑
官方示例里用seconds字段配置的是相对当前时间的延迟触发,要实现指定日期时间点触发,只需要把trigger里的seconds换成date字段,值为目标触发时间对应的Date对象即可。
实现代码(以 2022/08/28 08:30AM 为例)
import * as Notifications from 'expo-notifications'; // 构造目标触发时间:本地时区2022年8月28日上午8:30 const targetDate = new Date( 2022, // 年 7, // 月:注意JS Date月份从0开始计数,8月对应数值7 28, // 日 8, // 时:24小时制,上午8点传8,下午8点传20 30 // 分 ); Notifications.scheduleNotificationAsync({ content: { title: "Time's up!", body: 'Change sides!', }, trigger: { date: targetDate, }, });
注意避坑
- 月份计数规则:JS原生
Date构造函数的月份参数是0索引,1月对应0、12月对应11,传值的时候别直接写自然月数字,否则会差整整一个月。 - 时区问题:不推荐用
new Date('2022-08-28T08:30:00')这类字符串格式构造时间,不同运行环境可能默认按UTC时区解析,导致通知触发时间偏移几个小时。用上面代码里传数字参数的写法,会默认使用设备本地时区,不会出现时区偏差。 - 时间合法性校验:传入的
targetDate必须是未来的时间,如果传了已经过去的时间点,通知会立刻触发,不会按预期等待。 - 重复触发配置:如果需要按规则重复触发(比如每天8:30、每周一8:30),可以在
trigger里额外加repeats: true字段,配合对应的日期规则即可实现循环通知。
内容的提问来源于stack exchange,提问作者cocojambo
相关产品推荐
相关产品推荐

