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

如何配置UNNotification:特定时间触发后每周重复,且跳过下周一?

实现跳过下周一、之后每周一上午10点重复的通知

当然可以做到!你需要的是跳过下周一,从下下周一开始,每周一上午10点自动触发通知,这个需求其实只需要结合「指定首次触发的具体日期」和「每周重复的日历规则」就能实现,下面是具体的实现思路和代码:

核心思路

我们要先确定第一次触发通知的具体时间(下下周周一的10点),然后创建包含「周一、10点」这些重复规则的日历组件,这样当通知第一次触发后,就会自动按照每周一10点的规则重复。

代码实现

// 1. 计算下下周的周一上午10点作为首次触发时间
let calendar = Calendar.current
var firstFireDateComponents = calendar.dateComponents([.year, .month, .day], from: Date())
// 先获取下周一的日期
if let nextMonday = calendar.nextDate(after: Date(), matching: DateComponents(weekday: 2), matchingPolicy: .nextTime) {
    // 再加7天,得到下下周的周一
    if let firstFireDate = calendar.date(byAdding: .day, value: 7, to: nextMonday) {
        // 设置上午10点的时间
        firstFireDateComponents = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: firstFireDate)
        firstFireDateComponents.hour = 10
        firstFireDateComponents.minute = 0
    }
}

// 2. 创建包含重复规则的日历组件:保留weekday(iOS中1是周日,2是周一,可根据地区日历调整)、hour、minute
var repeatComponents = DateComponents()
repeatComponents.weekday = 2
repeatComponents.hour = 10
repeatComponents.minute = 0

// 3. 创建触发条件:首次触发用指定的下下周周一10点,开启重复后系统会沿用周一10点的规则
let trigger = UNCalendarNotificationTrigger(dateMatching: firstFireDateComponents, repeats: true)

// 后续创建通知请求并添加到通知中心
let content = UNMutableNotificationContent()
content.title = "每周提醒"
content.body = "周一上午10点的提醒来了!"
let request = UNNotificationRequest(identifier: "WeeklyMondayReminder", content: content, trigger: trigger)

UNUserNotificationCenter.current().add(request) { error in
    if let error = error {
        print("添加通知失败:\(error.localizedDescription)")
    }
}

关键说明

  • 关于weekday取值:iOS的Calendar中weekday默认1代表周日、2代表周一,如果你所在地区日历起始不同,可以通过calendar.firstWeekday确认后调整数值。
  • 为什么能跳过下周一:因为我们把首次触发时间直接设为下下周的周一10点,开启重复后系统会自动识别该时间对应的「周一10点」规则,之后每周同一时间触发,自然跳过了下周一。
  • 验证时间:可以用calendar.date(from: firstFireDateComponents)打印首次触发的具体日期,确认是否符合预期。

内容的提问来源于stack exchange,提问作者James White

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:39:02