Skip to content

Commit b6e26cc

Browse files
author
Gdxy
committed
修正因参数设置先后顺序导致最小日期和最大日期与默认日期之间的误差
1 parent 4b41afa commit b6e26cc

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

TLDatePicker/NSDate+TLCalendarExtention.h

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
* 比较from和self的时间差值,返回秒 self - from
2020
*/
2121
- (NSTimeInterval)compareFrom:(NSDate *)from;
22+
/**
23+
* 比较两个日期是否相等,unit: 精确度(Year ~ Second)
24+
*/
25+
- (BOOL)isEqualDate:(NSDate *)date miniUnit:(NSCalendarUnit)unit;
2226

2327
// MARK: - 判断
2428
/**

TLDatePicker/NSDate+TLCalendarExtention.m

+20
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,26 @@ - (NSTimeInterval)compareFrom:(NSDate *)from {
2727
return time;
2828
}
2929

30+
/// 比较两个日期是否相等,unit: 精确度(Year ~ Second)
31+
- (BOOL)isEqualDate:(NSDate *)date miniUnit:(NSCalendarUnit)unit {
32+
BOOL flag = self.year == date.year;
33+
if (unit == NSCalendarUnitYear) return flag;
34+
35+
flag = flag && self.month == date.month;
36+
if (unit == NSCalendarUnitMonth) return flag;
37+
38+
flag = flag && self.day == date.day;
39+
if (unit == NSCalendarUnitDay) return flag;
40+
41+
flag = flag && self.hour == date.hour;
42+
if (unit == NSCalendarUnitHour) return flag;
43+
44+
flag = flag && self.minute == date.minute;
45+
if (unit == NSCalendarUnitMinute) return flag;
46+
47+
return flag && self.second == date.second;;
48+
}
49+
3050
// MARK: - 判断
3151

3252
- (BOOL)isToday {

TLDatePicker/TLDatePickerView.m

+38-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,24 @@ - (void)setMode:(TLDatePickerMode)mode
9797
- (void)resetParams
9898
{
9999
if (!self.date) {
100-
self.date = [NSDate date];
100+
self.date = [NSDate date];
101+
if (self.maxDate && [self.maxDate compareFrom:self.date] < 0) {
102+
NSCalendarUnit unit = [self calendarUnit];
103+
if ([self.date isEqualDate:self.maxDate miniUnit:unit]) { // 小误差范围内修正
104+
self.maxDate = [NSDate dateWithTimeIntervalSince1970:self.date.timeIntervalSince1970 + 1];
105+
}else {
106+
NSAssert(NO, @"TLDatePicker: maxDate不能小于默认date");
107+
}
108+
}
109+
}else {
110+
if (self.minDate && [self.minDate compareFrom:self.date] > 0) {
111+
NSCalendarUnit unit = [self calendarUnit];
112+
if ([self.date isEqualDate:self.minDate miniUnit:unit]) { // 小误差范围内修正
113+
self.minDate = [NSDate dateWithTimeIntervalSince1970:self.date.timeIntervalSince1970 - 1];
114+
}else {
115+
NSAssert(NO, @"TLDatePicker: minDate不能大于默认date");
116+
}
117+
}
101118
}
102119

103120
[self.data updateComponentWithDate:self.date];
@@ -112,6 +129,26 @@ - (void)resetParams
112129
}
113130
}
114131

132+
- (NSCalendarUnit)calendarUnit
133+
{
134+
if (self.mode == TLDatePickerModeYear) {
135+
return NSCalendarUnitYear;
136+
}
137+
138+
if (self.mode == TLDatePickerModeYearAndMonth) {
139+
return NSCalendarUnitMonth;
140+
}
141+
if (self.mode == TLDatePickerModeDate) {
142+
return NSCalendarUnitDay;
143+
}
144+
if (self.mode == TLDatePickerModeTime || self.mode == TLDatePickerModeDateAndTime) {
145+
return NSCalendarUnitMinute;
146+
}
147+
148+
return NSCalendarUnitSecond;
149+
}
150+
151+
115152
/// 需要动画的component
116153
- (void)scrollToSelectedDateWithAnimatedComponent:(TLPickerComponent *)component
117154
{

0 commit comments

Comments
 (0)