iOS Notification Trigger: fortnightly and/or quarterly

I can’t seem to find any Apple Documentation for this exact scenario, and I’ve tried various ways to do this and I keep coming up empty.

I would like to schedule a repeating notification (iOS 10+ so UNCalendarNotificationTrigger or equivalent).
These are Local Notifications not Push Notifications.

  • Error Domain=NSOSStatusErrorDomain Code=-12780 \“(null)\”
  • swift: didSelectRowAtIndexPath
  • How to upload image with parameters using Alamofire in Swift
  • Why Is UITextField.text An Optional?
  • Swift - UICollectionView repeats (duplicate) cells
  • How to create UICollectionViewCell programmatically
  • My Goal:

    Schedule notifications that repeat:

    • once a fortnight (e.g., every second Tuesday)
    • once a quarter (e.g., 1st of every 3 months)

    My Current Approach:

    These triggers work well, and are simple to implement (Running the code in a Swift Playground).

    // Every day at 12pm
    var daily = DateComponents()
    daily.hour = 12
    let dailyTrigger = UNCalendarNotificationTrigger(dateMatching: daily, repeats: true)
    dailyTrigger.nextTriggerDate() // "Jan 4, 2017, 12:00 PM"
    // Every Tuesday at 12pm
    var weekly = DateComponents()
    weekly.hour = 12
    weekly.weekday = 3
    let weeklyTrigger = UNCalendarNotificationTrigger(dateMatching: weekly, repeats: true)
    weeklyTrigger.nextTriggerDate() // "Jan 10, 2017, 12:00 PM"
    // The 1st of every month at 12pm
    var monthly = DateComponents()
    monthly.hour = 12 = 1
    let monthlyTrigger = UNCalendarNotificationTrigger(dateMatching: monthly, repeats: true)
    monthlyTrigger.nextTriggerDate() // "Feb 1, 2017, 12:00 PM"
    // Every 1st of February at 12pm
    var yearly = DateComponents()
    yearly.hour = 12 = 1
    yearly.month = 2
    let yearlyTrigger = UNCalendarNotificationTrigger(dateMatching: yearly, repeats: true)
    yearlyTrigger.nextTriggerDate() // "Feb 1, 2017, 12:00 PM"


    I can’t seem to get a fortnightly or quarterly trigger to function correctly.

    // Every second Tuesday at 12pm
    // ... There is no "date.fortnight", is this possible?
    // The 1st of every quarter at 12pm
    var quarterly = DateComponents()
    quarterly.hour = 12 = 4
    // Values: 1, 2, 3 or 4 all produce the same "nextTriggerDate" - why?
    quarterly.quarter = 4 
    let quarterlyTrigger = UNCalendarNotificationTrigger(dateMatching: quarterly, repeats: true)

    So, to be clear, my questions are:

    1. Is it possible to get a notification that repeats every fortnight?
    2. How do we get a trigger for once a quarter?

    Since DateComponents() has a quarter unit, I assume that a quarterly trigger is possible. For the fortnightly reminder however, I’m not even sure if this is possible…

    Any insight would be appreciated!

    Solutions Collect From Internet About “iOS Notification Trigger: fortnightly and/or quarterly”

    I didn’t see any direct option to trigger fortnight notification.Suggestion from my end.

    1) Is it possible to get a notification that repeats every fortnight?

    I am proposing two options:

    1. Can we use UNTimeIntervalNotificationTrigger to repeat the notification with a time interval of two weeks time? Example below

      let timeInterValFor2Weeks = 1190507.790425003
      let intervalTrigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterValFor2Weeks, repeats: true)//"Jan 3, 2017, 5:24 PM"
      intervalTrigger.nextTriggerDate() //"Jan 17, 2017, 12:05 PM"
    2. Schedule two UNCalendarNotificationTrigger trigger, which should trigger first and third day of a month. For example it should fire notification in first Sunday and third Sunday of a month.

      var fortnightPart1 = DateComponents()
      fortnightPart1.weekday = 1 //( Sunday)
      fortnightPart1.weekdayOrdinal = 2 //= n == (nth Day in the 2nd Sunday in every month month)
      fortnightPart1.hour = 12
      let fortnightTrigger = UNCalendarNotificationTrigger(dateMatching: fortnightPart1, repeats: true)

    2) How do we get a trigger for once a quarter?

    If there is no direct option available, then I suggest the same solution as above.