如何获得本周的第一天和最后一天?我需要的是某种方法来过滤一组具有 NSDate 属性的对象,只留下那些出现在本周的对象,然后按天过滤它们。我还需要一些方法来获取本地化的日期名称。
我尝试过使用 NSCalendar、NSDate 和 NSDateComponents,但似乎我不能只检查日历的第一个工作日,因为上个月/下个月可能会有几周的时间。
如何获得本周的第一天和最后一天?我需要的是某种方法来过滤一组具有 NSDate 属性的对象,只留下那些出现在本周的对象,然后按天过滤它们。我还需要一些方法来获取本地化的日期名称。
我尝试过使用 NSCalendar、NSDate 和 NSDateComponents,但似乎我不能只检查日历的第一个工作日,因为上个月/下个月可能会有几周的时间。
使用 NSDateComponents 获取工作日,即从 1 代表星期日到 7 点。
获得工作日编号后,计算它与一周的第一天之间的差异。例如,如果您认为星期一 (2) 是第一天,那么它提前了多少天(或者会提前多少天)。如果工作日是 4(星期三),则差值为 2。这意味着如果从原始日期减去两天,您将得到它所在一周的第一天。
查看文档以获取详细信息,因为您需要处理这些对象还包含时间属性的事实。如果可以,请确保当您只对日期和日期比较感兴趣时,时间值始终为零。
好的,就这样,一个完成这项工作的python片段
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)