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

如何将HH:MM AM/PM格式时间传入本地推送localNotificationSchedule的date参数

解决方法

1. 12小时制时间字符串转当日总秒数

先写转换函数,把'hh:mm AM/PM'格式的时间转为当日0点开始计算的总秒数:

// 入例:'12:34 AM'、'09:23 PM'
function convertTimeStrToDaySeconds(timeStr) {
  const [time, period] = timeStr.split(' ');
  let [hours, minutes] = time.split(':').map(Number);
  
  // 12小时制转24小时制
  if (period === 'AM') {
    hours = hours === 12 ? 0 : hours;
  } else {
    hours = hours === 12 ? 12 : hours + 12;
  }
  return hours * 3600 + minutes * 60;
}

比如输入'12:34 AM'会返回2040,输入'05:56 PM'会返回64560。

2. 计算距离当前时间的目标间隔秒数

如果只需要取最近的(当天/次日)对应时间的间隔秒数,按下面方法计算:

const targetDaySeconds = convertTimeStrToDaySeconds('12:34 AM');
const now = new Date();
// 计算当前时间对应的当日总秒数
const currentDaySeconds = now.getHours() * 3600 + now.getMinutes() * 60 + now.getSeconds();

let diffSeconds = targetDaySeconds - currentDaySeconds;
// 如果今天的目标时间已经过了,就加1天的秒数取次日的对应时间
if (diffSeconds < 0) {
  diffSeconds += 86400;
}

// 直接传入构造器即可得到触发时间
const triggerDate = new Date(Date.now() + diffSeconds * 1000);

3. 适配按指定星期重复的需求

你需要按周重复推送的话,不要用repeatType: 'day',调整为按周重复,同时计算第一个触发时间的星期偏移:

// 入参是你定义的星期数组,比如[1,4,7]代表周一、周三、周日
function getNearestWeekOffset(targetWeeks) {
  const now = new Date();
  const currentWeekDay = now.getDay(); // JS原生返回0=周日,1=周一
  // 把你的星期格式转成JS兼容的格式
  const jsTargetWeeks = targetWeeks.map(w => w === 7 ? 0 : w);
  // 遍历找最近的符合要求的日期偏移量
  for (let i = 0; i < 7; i++) {
    const checkDay = (currentWeekDay + i) % 7;
    if (jsTargetWeeks.includes(checkDay)) {
      // 如果是当天且目标时间已过,就取下一周的对应日期
      if (i === 0 && diffSeconds < 0) {
        return i + 7;
      }
      return i;
    }
  }
}

调整最终触发时间和推送配置:

const targetWeeks = [1,4,7];
const weekOffsetDays = getNearestWeekOffset(targetWeeks);
// 加上星期偏移的秒数
diffSeconds += weekOffsetDays * 86400;
const finalTriggerDate = new Date(Date.now() + diffSeconds * 1000);

PushNotification.localNotificationSchedule({
  message: "It's time to do some meditation:)", 
  date: finalTriggerDate,
  allowWhileIdle: true, 
  repeatType: 'week', // 按周重复
  repeatTime: 1, // 每1周触发一次
});

内容的提问来源于stack exchange,提问作者Saurabh Kanswal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:27:04