Obteniendo el primer y último día de la semana actual
-
06-07-2019 - |
Pregunta
¿Cómo puedo obtener el primer y último día de la semana actual? Lo que necesito es alguna forma de filtrar un conjunto de objetos con la propiedad NSDate para dejar solo los que aparecen en la semana actual y luego filtrarlos por días. También necesito alguna forma de obtener nombres de días localizados.
He intentado jugar con NSCalendar, NSDate y NSDateComponents, pero parece que no puedo comprobar el primer día laborable del calendario, ya que puede haber semanas con días del mes anterior / siguiente.
Solución 2
Ok, aquí va, un fragmento de Python que hace el trabajo
def daySec(diff):
return 60*60*24*diff
def weekDays(dt=None):
if not dt:
dt = NSDate.date() # use today
cal = NSCalendar.currentCalendar()
dc = cal.components_fromDate_(NSWeekdayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit, dt)
normDt = cal.dateFromComponents_(dc) # get the day-rounded date
shift = dc.weekday() - cal.firstWeekday()
firstDt = normDt.dateByAddingTimeInterval_(daySec(-shift))
lastDt = normDt.dateByAddingTimeInterval_(daySec(-shift+7)) # up to next week's first day midnight
return (firstDt, lastDt)
Otros consejos
Use NSDateComponents para obtener el día de la semana, que es de 1 para el domingo a 7.
Una vez que tenga el número del día de la semana, calcule la diferencia entre este y su primer día de la semana. Por ejemplo, si considera que el lunes (2) es el primer día, cuántos días antes fue (o sería). Si el día de la semana es 4 (miércoles), la diferencia es 2. Esto significa que si resta dos días de la fecha original, obtendrá el primer día de la semana en que se encuentra.
Consulte la documentación para obtener detalles , porque tendrá que lidiar con el hecho de que estos objetos también incluyen atributos de tiempo. Si puede, asegúrese de que los valores de tiempo sean siempre cero cuando solo le interesen las fechas y las comparaciones de fechas.