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

Ionic3本地通知异常:设置不同触发时间却同时弹出求助

解决Ionic3本地通知同时触发的问题

嘿,我一眼就瞅出你代码里的问题啦!你在使用moment处理时间的时候踩了个常见的小坑——moment对象是不可变的,调用.add()方法后并不会修改原来的变量,你那些moment().add()的代码等于白写了,导致两个通知的触发时间根本没拉开足够差距!

问题出在哪?

看你原来的代码:

let three_sec = new Date(new Date().getTime() + 3000) 
let six_sec= new Date(new Date().getTime() + 6000) 
moment(three_sec).add(3, "second") 
moment(six_sec).add(6, "second") 
this.LocalNotifications.schedule([
  { id: 0, text: "3sec", trigger: {at: three_sec} },
  { id: 1, text: "6second", trigger: {at: six_sec}, }
])

你用moment(three_sec).add(3, "second")只是创建了一个新的moment实例,但没有把这个新实例赋值回three_sec变量,所以three_sec还是最初的「当前时间+3秒」,six_sec还是「当前时间+6秒」。如果设备处理速度快,这两个通知可能会看起来几乎同时触发,而且你本来想额外叠加的3秒、6秒完全没生效。

修正后的代码

方法一:正确使用moment(记得赋值+转成Date对象)

const now = new Date();
// 用moment计算时间后,转成Date并赋值给变量
const three_sec = moment(now).add(3, 'second').toDate();
const six_sec = moment(now).add(6, 'second').toDate();

this.LocalNotifications.schedule([
  { 
    id: 0, 
    text: "3sec", 
    trigger: { at: three_sec } 
  },
  { 
    id: 1, 
    text: "6second", 
    trigger: { at: six_sec } 
  }
]);

方法二:不用moment,直接用原生Date更简单

const nowTimestamp = Date.now();
const three_sec = new Date(nowTimestamp + 3000); // 当前+3秒
const six_sec = new Date(nowTimestamp + 6000); // 当前+6秒

this.LocalNotifications.schedule([
  { id: 0, text: "3sec", trigger: { at: three_sec } },
  { id: 1, text: "6second", trigger: { at: six_sec } }
]);

为啥这样能行?

  • 第一种方法里,我们把moment处理后的结果用.toDate()转成了Ionic LocalNotifications需要的Date类型,并且赋值给了对应的变量,确保触发时间是正确的。
  • 第二种方法直接用原生时间戳计算,避免了moment不可变对象的坑,代码更简洁,也不容易出错。

内容的提问来源于stack exchange,提问作者Parco A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:43:48