【发布时间】:2019-09-08 22:08:28
【问题描述】:
我想获得两个日期,即当月的第一天和最后一天。很简单。但是date(bySetting: Calendar.Component, value: Int, of: Date) 工作不正常。
看这段代码:
当Date() 打印2019-04-18 14:11:36 UTC
let calendar = Calendar.current
let firstDayDate = calendar.date(bySetting: .day, value: 1, to: Date())! //2019-05-01 03:00:00 UTC
let firsDayNextMonth = calendar.date(byAdding: .month, value: 1, to: firstDayDate)! //2019-06-01 03:00:00 UTC
let lastDayMonthDate = calendar.date(bySetting: .day, value: -1, to: firsDayNextMonth)! //2019-05-31 03:00:00 UTC
查看firstDayDate 值,日值设置为 1,但月值加 1。
如果我忘记了什么,请告诉我,但对我来说它看起来像一个错误
Obs:我现在可以使用DateComponent 做到这一点,但如果这是一个错误,我想向苹果提交一个错误。
Edit1:我不是在问如何获取当月的第一天和最后一天。我知道如何使用其他方法来做到这一点,但我如何提前解释,我认为date(byAdding: Calendar.Component, value: Int, to: Date) 方法中存在错误,或者我没有正确使用它。
【问题讨论】:
-
这是一个已知的错误,
.date(bySetting:value:of:)会及时向前搜索。可以使用.nextDate(after:matching:value:options:),及时搜索.backwards -
@ItaiFerber 如果这是一个已知的错误,你知道是否有一个错误报告给苹果讨论这个问题?
-
@MwcsMac 我如何在“Obs:”中描述我现在可以用其他方式做到这一点,但我发现这种方法有一个错误,我不是问如何获得第一天和最后一天一个月,我可以通过其他方式做到这一点。
-
这不是真正的错误,而是方法的工作原理。
-
我明白为什么会发生这种情况以及为什么它不是一个真正的错误,但对我来说,这是方法或其文档/描述的问题。他们并没有明确表示这是向前搜索,并且在doc 上他们使用了一个例子来告诉>这可能是向前或向后移动,而不一定是最近的[...]