Как рассчитать сколько рабочих дней между двумя датами? - PullRequest
3 голосов
/ 05 апреля 2010

Вчера мой друг спросил, возможно ли это на iPhone. Я взглянул на NSCalendar и все связанные с ним классы, но не смог найти решения для этого.

Так что я подумал об этом подходе: если бы у меня было две даты dateA и dateB, мне пришлось бы делать цикл for и повторять каждый день в этом интервале. Затем я буду считать рабочие дни с понедельника по пятницу и возвращать результат.

Потом я лег спать и проснулся с этой, возможно, гораздо лучшей идеей: мне нужно знать, какой сегодня день, когда я начинаю. Допустим, сегодня четверг. И тогда я должен знать, сколько дней в этом интервале. Последняя часть не трудно понять. Что касается первой части, я пока не знаю, но я считаю, что в NSCalendar есть значение дня недели. С этим я мог бы сделать простую математику, чтобы вычислить количество рабочих дней.

Кто-нибудь уже делал это на iPhone?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2010

Вот фрагменты, с помощью которых можно выполнить этот расчет:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

// Determine the integer number of weeks between the two dates
NSDateComponents *components = [calendar components:NSWeekCalendarUnit fromDate:firstDate toDate:secondDate options:0];
NSInteger numWeeks = [components week];

// Determine the day of the week for each date
components = [calendar components:NSWeekdayCalendarUnit fromDate:firstDate];
NSInteger firstWeekday = [components weekday];
components = [calendar components:NSWeekdayCalendarUnit fromDate:secondDate];
NSInteger secondWeekday = [components weekday];

[calendar release];

Я оставляю читателю в качестве упражнения упражнение, необходимое для вычисления необходимого количества рабочих дней на основе этих значений.

2 голосов
/ 05 апреля 2010

Сколько раз вы выполняете этот расчет? Должны ли даты, которые вам понадобятся, попадать в определенный диапазон?

Если вы выполняете большое количество различий в рабочих датах, подумайте о создании справочной таблицы, в которой будет храниться количество рабочих дней между этой и некоторой произвольной датой. Затем, чтобы найти количество рабочих дней между двумя датами, просто вычтите эти значения поиска. Что касается подсчета дней недели ... помните, что не все будние дни являются "рабочими днями", поэтому вам необходимо каким-то образом учитывать праздники.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...