每月在特定日期重复通知
Repeat Notifications monthly on specific day
我想每月在特定的一天重复通知,但我担心的是,如果用户选择 31 怎么办?那么通知只会每 2 个月触发一次,而不会在 2 月触发?
因为日期部分不匹配。
是否可以将日期设置为该月的最后一天,例如当二月是下个月并且用户选择了 31. 那么它会在二月的最后一天触发吗?
我可以采用非重复方式并手动添加通知,但那样我将不得不面对 64 个预定通知限制。
提前感谢您的帮助。
一种选择是使用远程通知并在服务器上处理它们。这将涉及更多的工作和服务器,但它更灵活并且允许您更改通知而无需用户更新应用程序。 Link 至 Remote Notifications 的 Apple 文档。
另一种选择是使用 Calendar。
当您执行发送通知的逻辑时,您可以测试今天是否是该月的最后一天。如果用户选择在 31 日收到通知,并说今天是该月的最后一天,是 30 号,您仍然可以发送通知,因为您知道这个特定月份没有 31 号。
Calendar
模块是必经之路。手动处理日期可能会非常棘手。
import Calendar
let selectedDate = "31/01/2020"
// Convert string to Date
let dateF = DateFormatter()
dateF.dateFormat = "dd/MM/yyyy"
let myDate = dateF.date(from: selectedDate)!
// Advancing date by a month, to get end of next month.
Calendar.current.date(byAdding: .month, value: 1, to: myDate) // "Feb 29, 2020 at 12:00 AM"
在上面的示例中,您可以看到如何将日期提前一个月。
如果用户选择一个月的 31 日,日历会自动准确计算下个月的月底,即使它只有 28、29、30 或 31 天。
我想每月在特定的一天重复通知,但我担心的是,如果用户选择 31 怎么办?那么通知只会每 2 个月触发一次,而不会在 2 月触发? 因为日期部分不匹配。
是否可以将日期设置为该月的最后一天,例如当二月是下个月并且用户选择了 31. 那么它会在二月的最后一天触发吗?
我可以采用非重复方式并手动添加通知,但那样我将不得不面对 64 个预定通知限制。
提前感谢您的帮助。
一种选择是使用远程通知并在服务器上处理它们。这将涉及更多的工作和服务器,但它更灵活并且允许您更改通知而无需用户更新应用程序。 Link 至 Remote Notifications 的 Apple 文档。
另一种选择是使用 Calendar。
当您执行发送通知的逻辑时,您可以测试今天是否是该月的最后一天。如果用户选择在 31 日收到通知,并说今天是该月的最后一天,是 30 号,您仍然可以发送通知,因为您知道这个特定月份没有 31 号。
Calendar
模块是必经之路。手动处理日期可能会非常棘手。
import Calendar
let selectedDate = "31/01/2020"
// Convert string to Date
let dateF = DateFormatter()
dateF.dateFormat = "dd/MM/yyyy"
let myDate = dateF.date(from: selectedDate)!
// Advancing date by a month, to get end of next month.
Calendar.current.date(byAdding: .month, value: 1, to: myDate) // "Feb 29, 2020 at 12:00 AM"
在上面的示例中,您可以看到如何将日期提前一个月。
如果用户选择一个月的 31 日,日历会自动准确计算下个月的月底,即使它只有 28、29、30 或 31 天。