Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 如何计算每X多个日期组件发生的事件的最近事件的日期?_Date_Cocoa_Nscalendar - Fatal编程技术网

Date 如何计算每X多个日期组件发生的事件的最近事件的日期?

Date 如何计算每X多个日期组件发生的事件的最近事件的日期?,date,cocoa,nscalendar,Date,Cocoa,Nscalendar,假设我有一个重复事件,它每X个组件发生一次,其中“组件”是一个定义了多个单位的DateComponents,例如“每三天两小时”或“每隔一年一天” 示例 首次事件日期:2015-02-27 事件间隔:2年1天(又称“每隔一年一天”) 从初始事件计算下一个事件的列表非常简单,只需创建初始事件的日期,以及描述重复发生金额的日期组件,就可以轻松找到第n个日期: let calendar=日历(标识符:。公历) 让initialEventDate=calendar.date(起始日期:DateCom

假设我有一个重复事件,它每X个组件发生一次,其中“组件”是一个定义了多个单位的
DateComponents
,例如“每三天两小时”或“每隔一年一天”

示例

  • 首次事件日期:
    2015-02-27
  • 事件间隔:
    2年1天
    (又称“每隔一年一天”)
从初始事件计算下一个事件的列表非常简单,只需创建初始事件的
日期
,以及描述重复发生金额的
日期组件
,就可以轻松找到第n个日期:

let calendar=日历(标识符:。公历)
让initialEventDate=calendar.date(起始日期:DateComponents(年份:2015,月份:02,日期:27))!
让eventInterval=DateComponents(年份:2,日期:1)
//返回第n个事件的日期
让eventDate={(n:Int)->中的日期
返回calendar.date(通过将:eventInterval*n添加到:initialEventDate)!
}
请注意,上面使用了一个自定义运算符,
*
,将所有组件与给定整数相乘

以上返回的正是我想要的:

  • 0→ 2015-02-27
  • 一,→ 2017-02-28
  • 二,→ 2019-03-01
  • 三,→ 2021-03-02
等等

问题是,如果给定其他日期,我如何查找上次活动的日期?或者换一种说法,我如何反向实现(即,为给定日期找到n)

例如,如果我有日期
2017-06-21
,那么n是介于1和2之间的某个数字,尽管在我的例子中,我真正感兴趣的是将n四舍五入以查找最后一个事件的日期。然而,重要的是,如果给定的日期在事件开始日期之前,我能够得到n的负值,就好像事件从永远开始就一直在发生,而事件开始日期只是定义偏移量的“示例”日期

起初,我想计算给定日期和初始事件日期之间的组件数量(仅要求作为间隔定义一部分的组件),然后将结果组件按间隔定义中的组件进行细分并向下舍入,但很快就清楚这是行不通的


我能想到的唯一其他方法就是猜测和检查。有没有更好的方法使用苹果的日期功能?

猜测后如何检查?我会在循环中添加间隔,直到日期过去。是的,但不是很有效!