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 周的部分分隔,我想知道新一周从哪一天开始。
我使用 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)
...