2014-02-04 2 views
2

Учитывая дату (например, сегодня 4 Feb 2014), я хотел бы получить список NSDate экземпляров, которые идут от Monday 27 Jan 2014 к Sunday 2 Mar 2014.Получить все NSDate в месяц (и даты в соседних недель)

В основном все даты в текущем месяце, а также даты с прошлой недели предыдущего месяца и первая неделя следующего месяца, если они делят одну и ту же неделю с некоторыми датами в текущем месяце.

Как я могу это достичь?

enter image description here

Я могу придумать способ, чтобы получить это (псевдо-код ниже), но это слишком долго и сложно. Есть ли более простой способ, как метод, который SDK обеспечивает для сокращения?

  1. Извлеките месяц компонент из [дата NSDate] (сегодня)
  2. Построить первый день
  3. месяца Рассчитать его будний день
  4. Если это среда (третий день недели), затем добавить сегодня -1, сегодня-2 в список и так далее
  5. повторите процедуру с шага 2, но с последним днем ​​месяца

Также для всех элиты там, просто becaus e Я не размещаю никакого кода, не означает, что это не вопрос кодирования. Проблема реальна (построить сетку календаря месяца), а найти правильный алгоритм/метод до кодирования намного лучше, чем играть и вручную делать математику с NSDate и NSCalendar (очень подвержена ошибкам, так как мне нужно будет учитывать все странные случаи). Я полагаю, что многие люди уже столкнулись с этой же проблемой, и если бы они могли поделиться некоторыми указателями, отлично. Если вы не хотите отвечать, не нужно отвечать.

+3

Как вы пытались его достичь? Что пошло не так? – Wain

+0

@Wain: Я хочу построить календарь только для этого месяца. Поэтому для этого календаря мне нужна сетка, которая представляет все даты этого месяца и некоторые даты из соседних месяцев. –

+0

@ Выставка EnzoTran покажет нам код, в котором вы рассчитываете дату, чтобы заполнить сетку. – rckoenes

ответ

2

Я собираюсь опубликовать очень общий код. Вам нужно будет сделать это конкретным для ваших нужд.

//Setup the calendar object 
NSCalendar *calendar = [NSCalendar currentCalendar]; 

//Get the current date's month 
NSUInteger month = [dateComponents month]; 

//Create an NSDate for the first and last day of the month 
NSDateComponents *comp = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; 
[comp setDay:1]; 
NSDate *firstOfMonth = [calendar dateFromComponents:comp]; 
[comp setMonth:[comp month]+1]; 
[comp setDay:0]; 
NSDate *lastOfMonth = [calendar dateFromComponents:comp]; 

//Now get the first and last week number from there 
NSUInteger unitFlags = NSWeekCalendarUnit; 
//Create a date component object from today's date. 
NSDateComponents *firstDateComponents = [calendar components:unitFlags 
                fromDate:firstOfMonth // for current date 
                options:0]; 
NSDateComponents *lastDateComponents = [calendar components:unitFlags 
                fromDate:lastOfMonth // for current date 
                options:0]; 


NSUInteger firstWeek = [firstDateComponents week]; 
NSUInteger lastWeek = [lastDateComponents week]; 

Теперь, когда у вас есть первая и последняя неделя вы можете начать в первый день первой недели и пройти в последний день прошлой недели, чтобы настроить свой календарь. Удачи.

+0

он показывает очень много ошибок, пожалуйста, исправьте тогда много многих ошибок – ashokdy

Смежные вопросы