Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Source/CKCalendarView.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#import <UIKit/UIKit.h>

@protocol CKCalendarDelegate;

Expand Down Expand Up @@ -80,5 +81,7 @@ typedef enum {
- (void)calendar:(CKCalendarView *)calendar didChangeToMonth:(NSDate *)date;

- (void)calendar:(CKCalendarView *)calendar didLayoutInRect:(CGRect)frame;
-(NSArray<NSDate *> *)datesBetweenDates:(NSDate *)startDate endDate:(NSDate *)endDate;


@end
35 changes: 22 additions & 13 deletions Source/CKCalendarView.m
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ @implementation DateButton
- (void)setDate:(NSDate *)date {
_date = date;
if (date) {
NSDateComponents *comps = [self.calendar components:NSDayCalendarUnit|NSMonthCalendarUnit fromDate:date];
NSDateComponents *comps = [self.calendar components:NSCalendarUnitDay|NSCalendarUnitMonth fromDate:date];
[self setTitle:[NSString stringWithFormat:@"%d", comps.day] forState:UIControlStateNormal];
} else {
[self setTitle:@"" forState:UIControlStateNormal];
Expand Down Expand Up @@ -134,7 +134,7 @@ - (id)initWithStartDay:(CKCalendarStartDay)firstDay {
}

- (void)_init:(CKCalendarStartDay)firstDay {
self.calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
self.calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
[self.calendar setLocale:[NSLocale currentLocale]];

self.cellWidth = DEFAULT_CELL_WIDTH;
Expand Down Expand Up @@ -289,7 +289,7 @@ - (void)layoutSubviews {
NSDate *endDate = [self _firstDayOfNextMonthContainingDate:self.monthShowing];
if (!self.onlyShowCurrentMonth) {
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setWeek:numberOfWeeksToShow];
[comps setWeekOfMonth:numberOfWeeksToShow];
endDate = [self.calendar dateByAddingComponents:comps toDate:date options:0];
}

Expand Down Expand Up @@ -550,13 +550,13 @@ - (UIColor *)dateBorderColor {
#pragma mark - Calendar helpers

- (NSDate *)_firstDayOfMonthContainingDate:(NSDate *)date {
NSDateComponents *comps = [self.calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];
NSDateComponents *comps = [self.calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
comps.day = 1;
return [self.calendar dateFromComponents:comps];
}

- (NSDate *)_firstDayOfNextMonthContainingDate:(NSDate *)date {
NSDateComponents *comps = [self.calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];
NSDateComponents *comps = [self.calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
comps.day = 1;
comps.month = comps.month + 1;
return [self.calendar dateFromComponents:comps];
Expand All @@ -567,8 +567,8 @@ - (BOOL)dateIsInCurrentMonth:(NSDate *)date {
}

- (NSComparisonResult)_compareByMonth:(NSDate *)date toDate:(NSDate *)otherDate {
NSDateComponents *day = [self.calendar components:NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date];
NSDateComponents *day2 = [self.calendar components:NSYearCalendarUnit|NSMonthCalendarUnit fromDate:otherDate];
NSDateComponents *day = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth fromDate:date];
NSDateComponents *day2 = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth fromDate:otherDate];

if (day.year < day2.year) {
return NSOrderedAscending;
Expand All @@ -584,7 +584,7 @@ - (NSComparisonResult)_compareByMonth:(NSDate *)date toDate:(NSDate *)otherDate
}

- (NSInteger)_placeInWeekForDate:(NSDate *)date {
NSDateComponents *compsFirstDayInMonth = [self.calendar components:NSWeekdayCalendarUnit fromDate:date];
NSDateComponents *compsFirstDayInMonth = [self.calendar components:NSCalendarUnitWeekday fromDate:date];
return (compsFirstDayInMonth.weekday - 1 - self.calendar.firstWeekday + 8) % 7;
}

Expand All @@ -598,16 +598,16 @@ - (BOOL)date:(NSDate *)date1 isSameDayAsDate:(NSDate *)date2 {
return NO;
}

NSDateComponents *day = [self.calendar components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date1];
NSDateComponents *day2 = [self.calendar components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date2];
NSDateComponents *day = [self.calendar components:NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date1];
NSDateComponents *day2 = [self.calendar components:NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date2];
return ([day2 day] == [day day] &&
[day2 month] == [day month] &&
[day2 year] == [day year] &&
[day2 era] == [day era]);
}

- (NSInteger)_numberOfWeeksInMonthContainingDate:(NSDate *)date {
return [self.calendar rangeOfUnit:NSWeekCalendarUnit inUnit:NSMonthCalendarUnit forDate:date].length;
return [self.calendar rangeOfUnit:NSCalendarUnitWeekOfYear inUnit:NSCalendarUnitMonth forDate:date].length;
}

- (NSDate *)_nextDay:(NSDate *)date {
Expand All @@ -623,8 +623,8 @@ - (NSDate *)_previousDay:(NSDate *)date {
}

- (NSInteger)_numberOfDaysFromDate:(NSDate *)startDate toDate:(NSDate *)endDate {
NSInteger startDay = [self.calendar ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:startDate];
NSInteger endDay = [self.calendar ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:endDate];
NSInteger startDay = [self.calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:startDate];
NSInteger endDay = [self.calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:endDate];
return endDay - startDay;
}

Expand Down Expand Up @@ -652,4 +652,13 @@ + (UIImage *)_imageNamed:(NSString *)name withColor:(UIColor *)color {
return coloredImg;
}

-(NSArray<NSDate *> *)datesBetweenDates:(NSDate *)startDate endDate:(NSDate *)endDate{
NSMutableArray *dates = [NSMutableArray array];
NSDate *curDate = startDate;
while([curDate timeIntervalSince1970] <= [endDate timeIntervalSince1970]) {
[dates addObject:curDate];
curDate = [NSDate dateWithTimeInterval:86400 sinceDate:curDate];
}
return dates;
}
@end