【发布时间】:2019-05-25 19:21:31
【问题描述】:
查看了一些关于 SO 的不同建议后,我无法确定为什么下面的功能不起作用。它似乎在某些月份返回 6,而在其他月份返回 5。当将星期更改为几天时,它可以完美地工作。
例如,尝试
weeksInMonth(8, forYear 2015)
结果为 6。
我相信我对日历上的“firstWeekday”属性有什么误解,但苹果或网上没有找到充分的解释。
已尝试过 .WeekOfMonth 和 .WeekOfYear。再次找不到确切差异的解释。
非常欢迎任何建议。
func weeksInMonth(month: Int, forYear year: Int) -> Int?
{
if (month < 1 || month > 12) { return nil }
let dateString = String(format: "%4d/%d/01", year, month)
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
if let date = dateFormatter.dateFromString(dateString),
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
{
calendar.firstWeekday = 2 // Monday
let weekRange = calendar.rangeOfUnit(.WeekOfMonth, inUnit: .Month, forDate: date)
let weeksCount = weekRange.length
return weeksCount
}
else
{
return nil
}
}
更新:
抱歉,我的问题不清楚。我正在尝试计算一个月中有多少周,其中包括星期一。对于 8 月,这应该是 5。
【问题讨论】:
-
2015 年 8 月有六个不同的周,所以结果是正确的,不是吗?
-
是的。我的意思是,不。嗯……也许。对不起...你的问题是什么?
-
抱歉,我已经用我的真实问题更新了这个问题。