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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top