我想得到一周的第一天和最后一天。但我的结果与apple:https://developer.apple.com/documentation/foundation/nsdatecomponents/1410442-weekday的文档不符
这是我的功能:
func startAndEndDateOfWeek(weekOfYearWithYear: (week: Int,year: Int)) -> (start: Date, end: Date) {
var output = (start: Date.init(), end: Date.init())
let calendar = Calendar(identifier: .gregorian)
var firstDayComponents = DateComponents()
firstDayComponents.weekOfYear = weekOfYearWithYear.week
firstDayComponents.yearForWeekOfYear = weekOfYearWithYear.year
firstDayComponents.weekday = 1
let firstDay = calendar.date(from: firstDayComponents)
var lastDayComponents = DateComponents()
lastDayComponents.weekOfYear = weekOfYearWithYear.week
lastDayComponents.yearForWeekOfYear = weekOfYearWithYear.year
lastDayComponents.weekday = 2
let lastDay = calendar.date(from: lastDayComponents)
output = (start: firstDay!, end: lastDay!)
return output
}
.weekday = 2 - >导致星期日,而不是0。
我也希望有一整天而不是16:00。
几点意见:
calendar.maximumRange(of: .weekday)
以获得有效值的范围,您可以查看calendar.weekdaySymbols
以查看这些weekDay
值的含义(例如“Sun”,“Mon”,“Tue”,“Wed”,“Thu”, “星期五”和“星期六”)。Date
对象引用了一个时刻。所以它不能代表“整天”。但它可以代表午夜(在你的时区午夜可能是格林威治标准时间/ UTC /祖鲁语下午4点)。
或者,你可以返回一个代表一段时间的DateInterval
。
func interval(ofWeek week: Int, in year: Int) -> DateInterval {
let calendar = Calendar.current
let date = DateComponents(calendar: calendar, weekOfYear: week, yearForWeekOfYear: year).date!
return calendar.dateInterval(of: .weekOfYear, for: date)!
}
然后
let formatter = DateIntervalFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .short
let year = Calendar.current.component(.year, from: Date())
let dateInterval = interval(ofWeek: 2, in: year)
print(formatter.string(from: dateInterval))
在美国语言环境中,间隔从1月6日开始:
1/6/19,12:00 AM - 1/13/19,12:00 AM
而在德国语言环境中,间隔从7日开始:
07.01.19,00:00 - 14.01.19,00:00func startAndEndDate(ofWeek week: Int, in year: Int) -> (Date, Date) {
let date = DateComponents(calendar: calendar, weekOfYear: week, yearForWeekOfYear: year).date!
let lastDate = calendar.date(byAdding: .day, value: 6, to: date)!
return (date, lastDate)
}
然后
let formatter = DateFormatter()
formatter.dateStyle = .short
let year = Calendar.current.component(.year, from: Date())
let (start, end) = startAndEndDate(ofWeek: 2, in: year)
print(formatter.string(from: start), "-", formatter.string(from: end))