在 Swift 中使用 Weeknumber 获取一周的第一天

Bri*_*vel 2 calendar nsdate nsdatecomponents swift

我正在尝试获取本周的第一天(比如说本周,我应该获取 2015-09-13)。

但是我在苹果提供的源代码中找不到合适的函数。

代码应该是这样的......

print(getFirstDay(40)) // Should print 27

func getFirstDay(weekNumber:Int)->Int?{
    let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    if let todayDate = formatter.dateFromString(weekNumber) {
        let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
        let myComponents = myCalendar.dateFromComponents(.weekOfYear)
        let date = myComponents.date
        return date
    } else {
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,上面的代码不起作用(显然),但我认为应该是在正确的方向上。

我怎样才能做到这一点?

/* 不重要 */ 我正在尝试在表格视图中创建一种日历应用程序,该应用程序由 4 周的部分分隔,我想知道新一周从哪一天开始。

Sky*_*org 5

我使用 Xcode 12 和 Swift 5 的解决方案

extension Date {

   var year: Int? {
       var calendar = Calendar.current
       let currentComponents = calendar.dateComponents([.year], from: self)
       return currentComponents.year
   }
} 

class func getWeekOfYear(from week: Int, year: Int? = Date().year, locale: Locale? = nil) -> Date? {
        var calendar = Calendar.current
        calendar.locale = locale
        let dateComponents = DateComponents(calendar: calendar, year: year, weekday: 1, weekOfYear: week)
        return calendar.date(from: dateComponents)
    }
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令运行它:

  getWeekOfYear(from: 38)             // Optional(2020-09-13 22:00:00 +0000)
  getWeekOfYear(from: 38, year: 2020) // Optional(2020-09-13 22:00:00 +0000)
  getWeekOfYear(from: 38, year: 2020, locale: Locale(identifier: de_DE) ) // Optional(2020-09-13 22:00:00 +0000)
Run Code Online (Sandbox Code Playgroud)

插件:

extension Date {

   func isBetween(_ date1: Date, and date2: Date) -> Bool {
      return (min(date1, date2) ... max(date1, date2)).contains(self)
   }

   var startOfWeek: Date? {
      var calendar = Calendar.current
      return calendar.dateInterval(of: .weekOfMonth, for: self)?.start
   }

   var endOfWeek: Date? {
       var calendar = Calendar.current
       return calendar.dateInterval(of: .weekOfMonth, for: self)?.end
   }

   var startOfMonth: Date? {
       var calendar = Calendar.current
       return calendar.dateInterval(of: .month, for: self)?.start
   }

   var endOfMonth: Date? {
       var calendar = Calendar.current
       return calendar.dateInterval(of: .month, for: self)?.end
   }

   var weekNumber: Int? {
       var calendar = Calendar.current
       let currentComponents = calendar.dateComponents([.weekOfYear], from: self)
       return currentComponents.weekOfYear
   }

   var monthNumber: Int? {
       var calendar = Calendar.current
       let currentComponents = calendar.dateComponents([.month], from: self)
       return currentComponents.month
   }
} 
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令运行它:

let date = Date() // Optional(2020-09-13 22:00:00 +0000)
date.monthNumber  // Optional(9)
date.weekNumber   // Optional(38)
Run Code Online (Sandbox Code Playgroud)

...