Saltar al contenido

Cómo obtener todos los días de la semana actual en Swift

Buscamos por el mundo on line para así tener para ti la respuesta para tu inquietud, en caso de alguna pregunta déjanos la duda y te contestamos porque estamos para servirte.

Solución:

Para obtener los días de la semana de la semana, es:

let calendar = Calendar.current
let today = calendar.startOfDay(for: Date())
let dayOfWeek = calendar.component(.weekday, from: today)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today)!
let days = (weekdays.lowerBound ..< weekdays.upperBound)
    .compactMap  calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today)   // use `flatMap` in Xcode versions before 9.3
    .filter  !calendar.isDateInWeekend($0) 

Para mostrar eso como "Jueves = 82", es

let formatter = DateFormatter()
formatter.dateFormat = "eeee' = 'D"
for date in days 
    print(formatter.string(from: date))

O

let strings = days.map  formatter.string(from: $0) 

Tuve problemas para adaptar la solución de Rob para cuando la semana comienza el lunes. Esta solución se adapta a su calendar.firstWeekday ajuste.

var calendar = Calendar.autoupdatingCurrent
calendar.firstWeekday = 2 // Start on Monday (or 1 for Sunday)
let today = calendar.startOfDay(for: Date())
var week = [Date]()
if let weekInterval = calendar.dateInterval(of: .weekOfYear, for: today) 
    for i in 0...6 
        if let day = calendar.date(byAdding: .day, value: i, to: weekInterval.start) 
            week += [day]
        
    

return week

Hice una pequeña extensión en Calendar, que podría ser útil para cualquier otra persona que busque una solución más funcional para esto.

import Foundation

extension Calendar 
  func intervalOfWeek(for date: Date) -> DateInterval? 
    dateInterval(of: .weekOfYear, for: date)
  

  func startOfWeek(for date: Date) -> Date? 
    intervalOfWeek(for: date)?.start
  

  func daysWithSameWeekOfYear(as date: Date) -> [Date] 
    guard let startOfWeek = startOfWeek(for: date) else 
      return []
    

    return (0 ... 6).reduce(into: [])  result, daysToAdd in
      result.append(Calendar.current.date(byAdding: .day, value: daysToAdd, to: startOfWeek))
    
    .compactMap  $0 
  

Tienes la posibilidad mostrar este enunciado si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *