Swift 每月的周数

Swift 每月的周数,swift,Swift,我用的是Swift 5。我想知道一个月的周数。2021年1月打印6周,但5月打印5周。我认为问题是firstWeekday设置为1。有没有一种方法可以在不设置第一个工作日的情况下获取给定月份的周数 var localCalendar = Calendar.current localCalendar.firstWeekday = 1 let weekRange = localCalendar.range(of: .weekOfMonth, in: .month, for: dateFormatte

我用的是Swift 5。我想知道一个月的周数。2021年1月打印6周,但5月打印5周。我认为问题是
firstWeekday
设置为1。有没有一种方法可以在不设置第一个工作日的情况下获取给定月份的周数

var localCalendar = Calendar.current
localCalendar.firstWeekday = 1
let weekRange = localCalendar.range(of: .weekOfMonth, in: .month, for: dateFormatter.date(from: monthName)!)
if let weekRange = weekRange {
    print("\(monthName) has \(weekRange.count) weeks.")
}

看起来你根本不想要一个月的周数。您需要日历打印输出中的行数

在标准的公历上表示一个月所需的行数公式如下所示

从月份的天数开始。再加上月初之前的空白天数,从周日开始。例如,2021年1月是31+5=36,因为它有31天长,但在开始之前5天(星期日到星期四)不是它的一部分。换句话说:2021年1月的第一天是星期五;这是一周中的第5天,如果我们把星期天称为0,那么我们得到31+5

现在整数除以7。我们至少需要这么多行。所以(31+5)/7使用整数除法是5。问题是:这就是我们需要的所有行吗

要找到答案,请获取该除法的剩余部分。如果不为零,请添加另一行。所以(31+5)%7是1,这告诉我们需要多容纳一天,所以我们需要另一排。那就是6

因此:

以下是一些快速的健康测试:

// January 2021
rowsNeededForMonthWith(numberOfDays: 31, startingOn: 5) // 6
// But suppose it had 30 days?
rowsNeededForMonthWith(numberOfDays: 30, startingOn: 5) // 5
// Or suppose it had started on Thursday? (cf July 2021)
rowsNeededForMonthWith(numberOfDays: 31, startingOn: 4) // 5

没有一个月(有时二月除外)包含确切的周数,所以您需要指定您期望的答案以及原因。“一个月内的周数”是什么意思?苹果日历应用程序根据周数改变其月份大小。或者可能不是周数,而是一个月内“周一”的数量。所以你的问题是这个月显示多少行?这是一个很好的问题,但这不是你偶然问的问题。我不知道你们对梅有什么看法。它需要6行。@matt我想OP的意思是他们的代码打印5行,但预期的输出是6行
// January 2021
rowsNeededForMonthWith(numberOfDays: 31, startingOn: 5) // 6
// But suppose it had 30 days?
rowsNeededForMonthWith(numberOfDays: 30, startingOn: 5) // 5
// Or suppose it had started on Thursday? (cf July 2021)
rowsNeededForMonthWith(numberOfDays: 31, startingOn: 4) // 5