Сегодня пятница, 6 марта. Как найти, что 16 февраля - начальный день, а 22 февраля - конец дня недели до предыдущей недели. 16 для моей страны Болгария в США будет 15 и 21 я использую .currentCalendar()Swift - Начальный день и конец дня недели до предыдущей недели
ответ
Что-то, как это должно работать:
let cal = NSCalendar.currentCalendar()
let components = NSDateComponents()
components.weekOfYear -= 1
if let date = cal.dateByAddingComponents(components, toDate: NSDate(), options: NSCalendarOptions(0)) {
var beginningOfWeek: NSDate?
var weekDuration = NSTimeInterval()
if cal.rangeOfUnit(.CalendarUnitWeekOfYear, startDate: &beginningOfWeek, interval: &weekDuration, forDate: date) {
let endOfWeek = beginningOfWeek?.dateByAddingTimeInterval(weekDuration)
print(beginningOfWeek) // Optional(2015-02-15 05:00:00 +0000)
print(endOfWeek) // Optional(2015-02-22 05:00:00 +0000)
}
}
Более простой Swift 2 альтернативы в качестве расширения, полученного из Martin R's answer for getting the end of the month:
extension: NSDate {
func startOfWeek(weekday: Int?) -> NSDate? {
guard
let cal: NSCalendar = NSCalendar.currentCalendar(),
let comp: NSDateComponents = cal.components([.YearForWeekOfYear, .WeekOfYear], fromDate: self) else { return nil }
comp.to12pm()
cal.firstWeekday = weekday ?? 1
return cal.dateFromComponents(comp)!
}
func endOfWeek(weekday: Int) -> NSDate? {
guard
let cal: NSCalendar = NSCalendar.currentCalendar(),
let comp: NSDateComponents = cal.components([.WeekOfYear], fromDate: self) else { return nil }
comp.weekOfYear = 1
comp.day -= 1
comp.to12pm()
return cal.dateByAddingComponents(comp, toDate: self.startOfWeek(weekday)!, options: [])!
}
}
Использование:
// Use 2 for Monday, 1 for Sunday:
print(NSDate().startOfWeek(1)!) // "2016-01-24 08:00:00 +0000\n"
print(NSDate().endOfWeek(1)!) // "2016-01-30 08:00:00 +0000\n"
Чтобы защититься от летнего времени и таким образом, вы должны также осуществлять расширение, чтобы заставить время до 12 часов:
internal extension NSDateComponents {
func to12pm() {
self.hour = 12
self.minute = 0
self.second = 0
}
}
Если кто-то ищут быстрый ответ 3:
func startOfWeek(weekday: Int?) -> Date {
var cal = Calendar.current
var component = cal.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)
component.to12am()
cal.firstWeekday = weekday ?? 1
return cal.date(from: component)!
}
func endOfWeek(weekday: Int) -> Date {
let cal = Calendar.current
var component = DateComponents()
component.weekOfYear = 1
component.day = -1
component.to12pm()
return cal.date(byAdding: component, to: startOfWeek(weekday: weekday))!
}
Я установлен в 00:00: 00 того дня
internal extension DateComponents {
mutating func to12am() {
self.hour = 0
self.minute = 0
self.second = 0
}
mutating func to12pm(){
self.hour = 23
self.minute = 59
self.second = 59
}
}
Не следует ли в endOfWeek включать 'component.second = 86399'? – MarksCode
Да. Я изменил ответ, чтобы установить время до конца дня 23:59:59 –
Удивительный! Можете ли вы помочь мне разобраться в форматировании, так что это «16 апреля - 23 апреля»? И тогда это не Sun-Sat, а Mon-Sun (возможно, я могу взломать это, просто добавив «+1» к каждому, но задаваясь вопросом, был ли лучший способ)? – jammyman34
- 1. Получить первый и последний день предыдущей недели
- 2. Как узнать начало и конец дня предыдущей недели
- 3. Получить начальную дату недели (настраиваемый начальный день недели)
- 4. Swift - Получить День недели Locale
- 5. SQL Получить дату первого дня предыдущей недели
- 6. Определить день недели данной недели
- 7. Проверка дня недели в Swift
- 8. PHP день недели числового день недели текст
- 9. Выберите, где день недели - день сегодняшнего дня
- 10. Секунды до указанного дня недели
- 11. SSRS - название дня недели
- 12. Начало и конец дня недели, учитывая год, начинающийся с середины недели
- 13. JQuery недели календарь изменение предыдущей неделя и следующая кнопка недели ПРЕД день и на следующий день
- 14. Конец дня недели для даты в Tableau
- 15. Как установить день месяца для дня недели?
- 16. время хранения и день недели
- 17. Первый день этой недели и прошлой недели
- 18. Получить ближайший день определенного дня недели
- 19. Получение название День от дня недели
- 20. Android: Получить день недели с выбранного дня
- 21. dateTime return 1 день до недели с сегодняшнего дня
- 22. Как получить даты начала недели и номер недели каждой недели в году, учитывая, что начальный день недели - понедельник в питоне?
- 23. Неисправность получения дня недели
- 24. Отображение дня недели в VB
- 25. Как получить число до дня недели?
- 26. Найдите день недели определенной даты, когда указан первый день недели
- 27. Проверьте день недели и время
- 28. Поиск последнего дня недели
- 29. NSCalendar первый день недели
- 30. Дата, использующая день недели
Благодарим за код. –
'weekOfYear' -1 будет иметь проблемы в первую неделю года. – Estel