【问题标题】:Calculate the current week number between a daterange in ios计算ios中日期范围之间的当前周数
【发布时间】:2020-07-08 08:00:02
【问题描述】:

我知道如何计算两个日期范围之间的总周数。

func calculateNoOfWeeksWith(startDate: Date, endDate: Date) -> Int {
    let calendar = Calendar.current

    let dateFrom = calendar.startOfDay(for: startDate)
    let dateTo = calendar.startOfDay(for: endDate)

    let components = calendar.dateComponents([.weekOfYear], from: dateFrom, to: dateTo)

    return components.weekOfYear ?? 0
 }

我也知道如何计算一年中的当前周数(今天)。

let calendar = Calendar.current
let weekOfYear = calendar.component(.weekOfYear, from: Date.init(timeIntervalSinceNow: 0))
print(weekOfYear)

但是如何计算两个日期范围而不是一年之间的当前周数(今天)?

我的意思是,如果我选择 2020-03-27 和 2020-09-07 之间的日期,它将返回 25 周。但是如果我想知道本周的周数是多少,那我们该怎么做呢?

【问题讨论】:

  • 计算开始日期 (w1) 和当前日期 (w2) 的周数并减去它们,w2-w1(如果您希望第一周为 1 而不是 0,则加 1)。
  • 谢谢。它奏效了。

标签: ios swift nsdatecomponents


【解决方案1】:

所以,根据@JoakimDanielson 的建议,答案应该是这样的:

func calculateCurrentWeekNumberWith(startDate: Date, endDate: Date = Date(timeIntervalSinceNow: 0)) -> Int {
    var calendar = Calendar.current
    calendar.firstWeekday = 2 //Monday
    calendar.locale = Locale.current  //Locale(identifier: "en_US_POSIX")

    let weekNumberForStartDate = calendar.component(.weekOfYear, from: startDate)
    let weekNumberForEndDate = calendar.component(.weekOfYear, from: endDate)

   let currentWeekNum = weekNumberForEndDate - weekNumberForStartDate

   return currentWeekNum
   //return currentWeekNum+1 // Why added 1, because the difference between 2020-03-16 & 20-03-27 is 1 but we know it should be 2nd week. Also if you want the first week to be 1 rather than 0
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多