@@ -48,6 +48,7 @@ public enum CalendarModelBuilder {
48
48
calendar: calendar,
49
49
totalWeekdayCount: weekdayCount,
50
50
targetDate: currentDate,
51
+ startingDate: startingDate,
51
52
result: & result
52
53
)
53
54
}
@@ -62,11 +63,12 @@ public enum CalendarModelBuilder {
62
63
63
64
let isLastDayOfMonth = nextDay. isFirstDayOfMonth ( calendar: calendar)
64
65
65
- if isLastDayOfMonth {
66
+ if isLastDayOfMonth || currentDate == endingDate {
66
67
addEndingPlaceholder (
67
68
calendar: calendar,
68
69
totalWeekdayCount: weekdayCount,
69
70
targetDate: currentDate,
71
+ endingDate: endingDate,
70
72
result: & result
71
73
)
72
74
}
@@ -100,6 +102,7 @@ extension CalendarModelBuilder {
100
102
calendar: Calendar ,
101
103
totalWeekdayCount: Int ,
102
104
targetDate: Date ,
105
+ startingDate: Date ,
103
106
result: inout [ CalendarModel . Year ]
104
107
) {
105
108
let placeholderCount = getBeginningPlaceholderCount (
@@ -114,7 +117,9 @@ extension CalendarModelBuilder {
114
117
result. appendDay (
115
118
number: calendar. component ( . day, from: dateToBeAdded) ,
116
119
date: dateToBeAdded,
117
- dateType: . previousMonth
120
+ dateType: dateToBeAdded < startingDate
121
+ ? . outOfRange
122
+ : . previousMonth
118
123
)
119
124
}
120
125
}
@@ -124,6 +129,7 @@ extension CalendarModelBuilder {
124
129
calendar: Calendar ,
125
130
totalWeekdayCount: Int ,
126
131
targetDate: Date ,
132
+ endingDate: Date ,
127
133
result: inout [ CalendarModel . Year ]
128
134
) {
129
135
let placeholderCount = getEndingPlaceholderCount (
@@ -140,10 +146,13 @@ extension CalendarModelBuilder {
140
146
} else {
141
147
index
142
148
}
149
+ let dateToBeAdded = nextDate ?? Date ( )
143
150
result. appendDay (
144
151
number: number,
145
- date: nextDate ?? Date ( ) ,
146
- dateType: . nextMonth
152
+ date: dateToBeAdded,
153
+ dateType: dateToBeAdded > endingDate
154
+ ? . outOfRange
155
+ : . nextMonth
147
156
)
148
157
}
149
158
}
0 commit comments