THDatePickerView.m 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. //
  2. // THDatePickerView.m
  3. // rongyp-company
  4. //
  5. // Created by Apple on 2016/11/16.
  6. // Copyright © 2016年 Apple. All rights reserved.
  7. //
  8. #import "THDatePickerView.h"
  9. #import "Header.h"
  10. @interface THDatePickerView () <UIPickerViewDelegate, UIPickerViewDataSource>
  11. @property (strong, nonatomic) UIPickerView *pickerView; // 选择器
  12. @property (strong, nonatomic) UIView *toolView; // 工具条
  13. @property (strong, nonatomic) UILabel *titleLbl; // 标题
  14. @property (strong, nonatomic) NSMutableArray *dataArray; // 数据源
  15. @property (copy, nonatomic) NSString *selectStr; // 选中的时间
  16. @property (strong, nonatomic) NSMutableArray *yearArr; // 年数组
  17. @property (strong, nonatomic) NSMutableArray *monthArr; // 月数组
  18. @property (strong, nonatomic) NSMutableArray *dayArr; // 日数组
  19. @property (strong, nonatomic) NSMutableArray *hourArr; // 时数组
  20. @property (strong, nonatomic) NSMutableArray *minuteArr; // 分数组
  21. @property (strong, nonatomic) NSArray *timeArr; // 当前时间数组
  22. @property (copy, nonatomic) NSString *year; // 选中年
  23. @property (copy, nonatomic) NSString *month; //选中月
  24. @property (copy, nonatomic) NSString *day; //选中日
  25. @property (copy, nonatomic) NSString *hour; //选中时
  26. @property (copy, nonatomic) NSString *minute; //选中分
  27. @end
  28. #define THColorRGB(rgb) [UIColor colorWithRed:(rgb)/255.0 green:(rgb)/255.0 blue:(rgb)/255.0 alpha:1.0]
  29. @implementation THDatePickerView
  30. #pragma mark - init
  31. /// 初始化
  32. - (instancetype)initWithFrame:(CGRect)frame
  33. {
  34. self = [super initWithFrame:frame];
  35. if (self) {
  36. self.backgroundColor = [UIColor whiteColor];
  37. self.timeArr = [NSArray array];
  38. self.dataArray = [NSMutableArray array];
  39. self.minuteArr = [NSMutableArray array];
  40. [self.dataArray addObject:self.yearArr];
  41. [self.dataArray addObject:self.monthArr];
  42. [self.dataArray addObject:self.dayArr];
  43. [self.dataArray addObject:self.hourArr];
  44. [self configData];
  45. [self configToolView];
  46. [self configPickerView];
  47. }
  48. return self;
  49. }
  50. - (void)configData {
  51. self.isSlide = YES;
  52. self.minuteInterval = 5;
  53. NSDate *date = [NSDate date];
  54. NSDateFormatter* dateFormatter = [[NSDateFormatter alloc]init];
  55. [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
  56. self.date = [dateFormatter stringFromDate:date];
  57. }
  58. #pragma mark - 配置界面
  59. /// 配置工具条
  60. - (void)configToolView {
  61. self.toolView = [[UIView alloc] init];
  62. self.toolView.frame = CGRectMake(0, 0, self.frame.size.width, 44);
  63. [self addSubview:self.toolView];
  64. UIButton *saveBtn = [[UIButton alloc] init];
  65. saveBtn.frame = CGRectMake(self.frame.size.width - 50, 2, 40, 40);
  66. [saveBtn setTitle:@"确定" forState:UIControlStateNormal];
  67. [saveBtn setTitleColor:SXUIColorFromRGB(0x4e69ff) forState:UIControlStateNormal];
  68. [saveBtn addTarget:self action:@selector(saveBtnClick) forControlEvents:UIControlEventTouchUpInside];
  69. [self.toolView addSubview:saveBtn];
  70. UIButton *cancelBtn = [[UIButton alloc] init];
  71. cancelBtn.frame = CGRectMake(10, 2, 40, 40);
  72. [cancelBtn setTitle:@"取消" forState:UIControlStateNormal];
  73. [cancelBtn setTitleColor:SXUIColorFromRGB(0x4e69ff) forState:UIControlStateNormal];
  74. [cancelBtn addTarget:self action:@selector(cancelBtnClick) forControlEvents:UIControlEventTouchUpInside];
  75. [self.toolView addSubview:cancelBtn];
  76. self.titleLbl = [[UILabel alloc] init];
  77. self.titleLbl.frame = CGRectMake(60, 2, self.frame.size.width - 120, 40);
  78. self.titleLbl.textAlignment = NSTextAlignmentCenter;
  79. self.titleLbl.textColor = THColorRGB(34);
  80. [self.toolView addSubview:self.titleLbl];
  81. }
  82. /// 配置UIPickerView
  83. - (void)configPickerView {
  84. self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.toolView.frame), self.frame.size.width, self.frame.size.height - 44)];
  85. self.pickerView.backgroundColor = [UIColor whiteColor];
  86. self.pickerView.dataSource = self;
  87. self.pickerView.delegate = self;
  88. self.pickerView.showsSelectionIndicator = YES;
  89. [self addSubview:self.pickerView];
  90. }
  91. - (void)setTitle:(NSString *)title {
  92. _title = title;
  93. self.titleLbl.text = title;
  94. }
  95. - (void)setDate:(NSString *)date {
  96. _date = date;
  97. NSString *newDate = [[date stringByReplacingOccurrencesOfString:@"-" withString:@" "] stringByReplacingOccurrencesOfString:@":" withString:@" "];
  98. NSMutableArray *timerArray = [NSMutableArray arrayWithArray:[newDate componentsSeparatedByString:@" "]];
  99. [timerArray replaceObjectAtIndex:0 withObject:[NSString stringWithFormat:@"%@年", timerArray[0]]];
  100. [timerArray replaceObjectAtIndex:1 withObject:[NSString stringWithFormat:@"%@月", timerArray[1]]];
  101. [timerArray replaceObjectAtIndex:2 withObject:[NSString stringWithFormat:@"%@日", timerArray[2]]];
  102. [timerArray replaceObjectAtIndex:3 withObject:[NSString stringWithFormat:@"%@时", timerArray[3]]];
  103. [timerArray replaceObjectAtIndex:4 withObject:[NSString stringWithFormat:@"%@分", timerArray[4]]];
  104. self.timeArr = timerArray;
  105. }
  106. - (void)setMinuteInterval:(NSInteger)minuteInterval {
  107. _minuteInterval = minuteInterval;
  108. if (self.minuteArr.count > 0) {
  109. [self.minuteArr removeAllObjects];
  110. self.minuteArr = [self configMinuteArray];
  111. [self.dataArray replaceObjectAtIndex:self.dataArray.count - 1 withObject:self.minuteArr];
  112. } else {
  113. self.minuteArr = [self configMinuteArray];
  114. [self.dataArray addObject:self.minuteArr];
  115. }
  116. }
  117. - (void)show {
  118. self.year = self.timeArr[0];
  119. self.month = [NSString stringWithFormat:@"%ld月", [self.timeArr[1] integerValue]];
  120. self.day = [NSString stringWithFormat:@"%ld日", [self.timeArr[2] integerValue]];
  121. self.hour = [NSString stringWithFormat:@"%ld时", [self.timeArr[3] integerValue]];
  122. self.minute = self.minuteInterval == 1 ? [NSString stringWithFormat:@"%ld分", [self.timeArr[4] integerValue]] : self.minuteArr[self.minuteArr.count / 2];
  123. [self.pickerView selectRow:[self.yearArr indexOfObject:self.year] inComponent:0 animated:YES];
  124. /// 重新格式化转一下,是因为如果是09月/日/时,数据源是9月/日/时,就会出现崩溃
  125. [self.pickerView selectRow:[self.monthArr indexOfObject:self.month] inComponent:1 animated:YES];
  126. [self.pickerView selectRow:[self.dayArr indexOfObject:self.day] inComponent:2 animated:YES];
  127. [self.pickerView selectRow:[self.hourArr indexOfObject:self.hour] inComponent:3 animated:YES];
  128. [self.pickerView selectRow:self.minuteInterval == 1 ? ([self.minuteArr indexOfObject:self.minute]) : (self.minuteArr.count / 2) inComponent:4 animated:YES];
  129. /// 刷新日
  130. [self refreshDay];
  131. }
  132. #pragma mark - 点击方法
  133. /// 保存按钮点击方法
  134. - (void)saveBtnClick {
  135. NSLog(@"点击了保存");
  136. NSString *month = self.month.length == 3 ? [NSString stringWithFormat:@"%ld", self.month.integerValue] : [NSString stringWithFormat:@"0%ld", self.month.integerValue];
  137. NSString *day = self.day.length == 3 ? [NSString stringWithFormat:@"%ld", self.day.integerValue] : [NSString stringWithFormat:@"0%ld", self.day.integerValue];
  138. NSString *hour = self.hour.length == 3 ? [NSString stringWithFormat:@"%ld", self.hour.integerValue] : [NSString stringWithFormat:@"0%ld", self.hour.integerValue];
  139. NSString *minute = self.minute.length == 3 ? [NSString stringWithFormat:@"%ld", self.minute.integerValue] : [NSString stringWithFormat:@"0%ld", self.minute.integerValue];
  140. self.selectStr = [NSString stringWithFormat:@"%ld-%@-%@ %@:%@:00", [self.year integerValue], month, day, hour, minute];
  141. if ([self.delegate respondsToSelector:@selector(datePickerViewSaveBtnClickDelegate:)]) {
  142. [self.delegate datePickerViewSaveBtnClickDelegate:self.selectStr];
  143. }
  144. }
  145. /// 取消按钮点击方法
  146. - (void)cancelBtnClick {
  147. NSLog(@"点击了取消");
  148. if ([self.delegate respondsToSelector:@selector(datePickerViewCancelBtnClickDelegate)]) {
  149. [self.delegate datePickerViewCancelBtnClickDelegate];
  150. }
  151. }
  152. #pragma mark - UIPickerViewDelegate and UIPickerViewDataSource
  153. /// UIPickerView返回多少组
  154. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
  155. return self.dataArray.count;
  156. }
  157. /// UIPickerView返回每组多少条数据
  158. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
  159. return [self.dataArray[component] count] * 200;
  160. }
  161. /// UIPickerView选择哪一行
  162. - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
  163. NSInteger time_integerValue = [self.timeArr[component] integerValue];
  164. switch (component) {
  165. case 0: { // 年
  166. NSString *year_integerValue = self.yearArr[row%[self.dataArray[component] count]];
  167. if (!self.isSlide) {
  168. self.year = year_integerValue;
  169. return;
  170. }
  171. // if (year_integerValue.integerValue < time_integerValue) {
  172. // [pickerView selectRow:[self.dataArray[component] indexOfObject:self.timeArr[component]] inComponent:component animated:YES];
  173. // } else {
  174. self.year = year_integerValue;
  175. // /// 刷新日
  176. [self refreshDay];
  177. // /// 根据当前选择的年份和月份获取当月的天数
  178. NSString *dayStr = [self getDayNumber:[self.year integerValue] month:[self.month integerValue]];
  179. if (self.dayArr.count > [dayStr integerValue]) {
  180. if (self.day.integerValue > [dayStr integerValue]) {
  181. [pickerView selectRow:[self.dataArray[2] indexOfObject:[dayStr stringByAppendingString:@"日"]] inComponent:2 animated:YES];
  182. self.day = [dayStr stringByAppendingString:@"日"];
  183. }
  184. }
  185. // }
  186. } break;
  187. case 1: { // 月
  188. NSString *month_value = self.monthArr[row%[self.dataArray[component] count]];
  189. if (!self.isSlide) {
  190. self.month = month_value;
  191. /// 刷新日
  192. [self refreshDay];
  193. return;
  194. }
  195. // // 如果选择年大于当前年 就直接赋值月
  196. // if ([self.year integerValue] > [self.timeArr[0] integerValue]) {
  197. //
  198. // self.month = month_value;
  199. //
  200. // /// 根据当前选择的年份和月份获取当月的天数
  201. // NSString *dayStr = [self getDayNumber:[self.year integerValue] month:[self.month integerValue]];
  202. // if (self.dayArr.count > [dayStr integerValue]) {
  203. // if (self.day.integerValue > [dayStr integerValue]) {
  204. // if (self.isSlide) {
  205. // [pickerView selectRow:[self.dataArray[2] indexOfObject:[dayStr stringByAppendingString:@"日"]] inComponent:2 animated:YES];
  206. // self.day = [dayStr stringByAppendingString:@"日"];
  207. // } else {
  208. // self.month = month_value;
  209. // }
  210. // }
  211. // }
  212. // // 如果选择的年等于当前年,就判断月份
  213. // } else if ([self.year integerValue] == [self.timeArr[0] integerValue]) {
  214. // // 如果选择的月份小于当前月份 就刷新到当前月份
  215. // if (month_value.integerValue < [self.timeArr[component] integerValue]) {
  216. // if (self.isSlide) {
  217. // [pickerView selectRow:[self.dataArray[component] indexOfObject:[NSString stringWithFormat:@"%ld月", [self.timeArr[component] integerValue]]] inComponent:component animated:YES];
  218. // } else {
  219. // self.month = month_value;
  220. // }
  221. // // 如果选择的月份大于当前月份,就直接赋值月份
  222. // } else {
  223. self.month = month_value;
  224. /// 根据当前选择的年份和月份获取当月的天数
  225. NSString *dayStr = [self getDayNumber:[self.year integerValue] month:[self.month integerValue]];
  226. if (self.dayArr.count > dayStr.integerValue) {
  227. if (self.day.integerValue > dayStr.integerValue) {
  228. [pickerView selectRow:[self.dataArray[2] indexOfObject:[dayStr stringByAppendingString:@"日"]] inComponent:2 animated:YES];
  229. self.day = [dayStr stringByAppendingString:@"日"];
  230. }
  231. }
  232. // }
  233. // }
  234. /// 刷新日
  235. [self refreshDay];
  236. } break;
  237. case 2: { // 日
  238. /// 根据当前选择的年份和月份获取当月的天数
  239. NSString *dayStr = [self getDayNumber:[self.year integerValue] month:[self.month integerValue]];
  240. // 如果选择年大于当前年 就直接赋值日
  241. NSString *day_value = self.dayArr[row%[self.dataArray[component] count]];
  242. if (!self.isSlide) {
  243. self.day = day_value;
  244. return;
  245. }
  246. // if ([self.year integerValue] > [self.timeArr[0] integerValue]) {
  247. // if (self.dayArr.count <= [dayStr integerValue]) {
  248. // self.day = day_value;
  249. // } else {
  250. // if (day_value.integerValue <= [dayStr integerValue]) {
  251. // self.day = day_value;
  252. // } else {
  253. // [pickerView selectRow:[self.dataArray[component] indexOfObject:[dayStr stringByAppendingString:@"日"]] inComponent:component animated:YES];
  254. // }
  255. // }
  256. // // 如果选择的年等于当前年,就判断月份
  257. // } else if ([self.year integerValue] == [self.timeArr[0] integerValue]) {
  258. // // 如果选择的月份大于当前月份 就直接复制
  259. // if ([self.month integerValue] > [self.timeArr[1] integerValue]) {
  260. // if (self.dayArr.count <= [dayStr integerValue]) {
  261. // self.day = day_value;
  262. // } else {
  263. // if (day_value.integerValue <= [dayStr integerValue]) {
  264. // self.day = day_value;
  265. // } else {
  266. // [pickerView selectRow:[self.dataArray[component] indexOfObject:[dayStr stringByAppendingString:@"日"]] inComponent:component animated:YES];
  267. // }
  268. // }
  269. // // 如果选择的月份等于当前月份,就判断日
  270. // } else if ([self.month integerValue] == [self.timeArr[1] integerValue]) {
  271. // // 如果选择的日小于当前日,就刷新到当前日
  272. // if (day_value.integerValue < [self.timeArr[component] integerValue]) {
  273. // if (self.isSlide) {
  274. // [pickerView selectRow:[self.dataArray[component] indexOfObject:[NSString stringWithFormat:@"%ld日", time_integerValue]] inComponent:component animated:YES];
  275. // } else {
  276. // self.day = day_value;
  277. // }
  278. // // 如果选择的日大于当前日,就复制日
  279. // } else {
  280. // if (self.dayArr.count <= [dayStr integerValue]) {
  281. self.day = day_value;
  282. // } else {
  283. // if ([self.dayArr[row%[self.dataArray[component] count]] integerValue] <= [dayStr integerValue]) {
  284. // self.day = day_value;
  285. // } else {
  286. // [pickerView selectRow:[self.dataArray[component] indexOfObject:[dayStr stringByAppendingString:@"日"]] inComponent:component animated:YES];
  287. // }
  288. // }
  289. // }
  290. // }
  291. // }
  292. } break;
  293. case 3: { // 时
  294. NSString *hour_value = self.hourArr[row%[self.dataArray[component] count]];
  295. if (!self.isSlide) {
  296. self.hour = hour_value;
  297. return;
  298. }
  299. // 如果选择年大于当前年 就直接赋值时
  300. // if ([self.year integerValue] > [self.timeArr[0] integerValue]) {
  301. // self.hour = hour_value;
  302. // // 如果选择的年等于当前年,就判断月份
  303. // } else if ([self.year integerValue] == [self.timeArr[0] integerValue]) {
  304. // // 如果选择的月份大于当前月份 就直接复制时
  305. // if ([self.month integerValue] > [self.timeArr[1] integerValue]) {
  306. self.hour = hour_value;
  307. // // 如果选择的月份等于当前月份,就判断日
  308. // } else if ([self.month integerValue] == [self.timeArr[1] integerValue]) {
  309. // // 如果选择的日大于当前日,就直接复制时
  310. // if ([self.day integerValue] > [self.timeArr[2] integerValue]) {
  311. // self.hour = hour_value;
  312. // // 如果选择的日等于当前日,就判断时
  313. // } else if ([self.day integerValue] == [self.timeArr[2] integerValue]) {
  314. // // 如果选择的时小于当前时,就刷新到当前时
  315. // if ([self.hourArr[row%[self.dataArray[component] count]] integerValue] < [self.timeArr[3] integerValue]) {
  316. // [pickerView selectRow:[self.dataArray[component] indexOfObject:self.timeArr[component]] inComponent:component animated:YES];??
  317. // // 如果选择的时大于当前时,就直接赋值
  318. // } else {
  319. // self.hour = hour_value;
  320. // }
  321. // }
  322. // }
  323. // }
  324. } break;
  325. case 4: { // 分
  326. // 如果选择年大于当前年 就直接赋值时
  327. // if ([self.year integerValue] > [self.timeArr[0] integerValue]) {
  328. self.minute = self.minuteArr[row%[self.dataArray[component] count]];
  329. // // 如果选择的年等于当前年,就判断月份
  330. // } else if ([self.year integerValue] == [self.timeArr[0] integerValue]) {
  331. // // 如果选择的月份大于当前月份 就直接复制时
  332. // if ([self.month integerValue] > [self.timeArr[1] integerValue]) {
  333. // self.minute = self.minuteArr[row%[self.dataArray[component] count]];
  334. // // 如果选择的月份等于当前月份,就判断日
  335. // } else if ([self.month integerValue] == [self.timeArr[1] integerValue]) {
  336. // // 如果选择的日大于当前日,就直接复制时
  337. // if ([self.day integerValue] > [self.timeArr[2] integerValue]) {
  338. // self.minute = self.minuteArr[row%[self.dataArray[component] count]];
  339. // // 如果选择的日等于当前日,就判断时
  340. // } else if ([self.day integerValue] == [self.timeArr[2] integerValue]) {
  341. // // 如果选择的时大于当前时,就直接赋值
  342. // if ([self.hour integerValue] > [self.timeArr[3] integerValue]) {
  343. // self.minute = self.minuteArr[row%[self.dataArray[component] count]];
  344. // // 如果选择的时等于当前时,就判断分
  345. // } else if ([self.hour integerValue] == [self.timeArr[3] integerValue]) {
  346. // // 如果选择的分小于当前分,就刷新分
  347. // if ([self.minuteArr[row%[self.dataArray[component] count]] integerValue] < [self.timeArr[4] integerValue]) {
  348. // [pickerView selectRow:[self.dataArray[component] indexOfObject:self.timeArr[component]] inComponent:component animated:YES];
  349. // // 如果选择分大于当前分,就直接赋值
  350. // } else {
  351. // self.minute = self.minuteArr[row%[self.dataArray[component] count]];
  352. // }
  353. // }
  354. // }
  355. // }
  356. // }
  357. } break;
  358. default: break;
  359. }
  360. }
  361. /// UIPickerView返回每一行数据
  362. - (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
  363. return [self.dataArray[component] objectAtIndex:row%[self.dataArray[component] count]];
  364. }
  365. /// UIPickerView返回每一行的高度
  366. - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
  367. return 44;
  368. }
  369. /// UIPickerView返回每一行的View
  370. -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
  371. UILabel *titleLbl;
  372. if (!view) {
  373. titleLbl = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, self.frame.size.width, 44)];
  374. titleLbl.font = [UIFont systemFontOfSize:15];
  375. titleLbl.textAlignment = NSTextAlignmentCenter;
  376. } else {
  377. titleLbl = (UILabel *)view;
  378. }
  379. titleLbl.text = [self.dataArray[component] objectAtIndex:row%[self.dataArray[component] count]];
  380. return titleLbl;
  381. }
  382. - (void)pickerViewLoaded:(NSInteger)component row:(NSInteger)row{
  383. NSUInteger max = 16384;
  384. NSUInteger base10 = (max/2)-(max/2)%row;
  385. [self.pickerView selectRow:[self.pickerView selectedRowInComponent:component] % row + base10 inComponent:component animated:NO];
  386. }
  387. /// 获取年份
  388. - (NSMutableArray *)yearArr {
  389. if (!_yearArr) {
  390. _yearArr = [NSMutableArray array];
  391. for (int i = 1970; i < 2099; i ++) {
  392. [_yearArr addObject:[NSString stringWithFormat:@"%d年", i]];
  393. }
  394. }
  395. return _yearArr;
  396. }
  397. /// 获取月份
  398. - (NSMutableArray *)monthArr {
  399. // NSDate *today = [NSDate date];
  400. // NSCalendar *c = [NSCalendar currentCalendar];
  401. // NSRange days = [c rangeOfUnit:NSCalendarUnitMonth inUnit:NSCalendarUnitYear forDate:today];
  402. if (!_monthArr) {
  403. _monthArr = [NSMutableArray array];
  404. for (int i = 1; i <= 12; i ++) {
  405. [_monthArr addObject:[NSString stringWithFormat:@"%d月", i]];
  406. }
  407. }
  408. return _monthArr;
  409. }
  410. /// 获取当前月的天数
  411. - (NSMutableArray *)dayArr {
  412. if (!_dayArr) {
  413. _dayArr = [NSMutableArray array];
  414. for (int i = 1; i <= 31; i ++) {
  415. [_dayArr addObject:[NSString stringWithFormat:@"%d日", i]];
  416. }
  417. }
  418. return _dayArr;
  419. }
  420. /// 获取小时
  421. - (NSMutableArray *)hourArr {
  422. if (!_hourArr) {
  423. _hourArr = [NSMutableArray array];
  424. for (int i = 0; i < 24; i ++) {
  425. [_hourArr addObject:[NSString stringWithFormat:@"%d时", i]];
  426. }
  427. }
  428. return _hourArr;
  429. }
  430. /// 获取分钟
  431. - (NSMutableArray *)configMinuteArray {
  432. NSMutableArray *minuteArray = [NSMutableArray array];
  433. for (int i = 0; i <= 60 - self.minuteInterval; i ++) {
  434. if (i % self.minuteInterval == 0) {
  435. [minuteArray addObject:[NSString stringWithFormat:@"%d分", i]];
  436. continue;
  437. }
  438. }
  439. return minuteArray;
  440. }
  441. // 比较选择的时间是否小于当前时间
  442. - (int)compareDate:(NSString *)date01 withDate:(NSString *)date02{
  443. int ci;
  444. NSDateFormatter *df = [[NSDateFormatter alloc]init];
  445. [df setDateFormat:@"yyyy年,MM月,dd日,HH时,mm分"];
  446. NSDate *dt1 = [[NSDate alloc] init];
  447. NSDate *dt2 = [[NSDate alloc] init];
  448. dt1 = [df dateFromString:date01];
  449. dt2 = [df dateFromString:date02];
  450. NSComparisonResult result = [dt1 compare:dt2];
  451. switch (result) {
  452. //date02比date01大
  453. case NSOrderedAscending: ci=1;break;
  454. //date02比date01小
  455. case NSOrderedDescending: ci=-1;break;
  456. //date02=date01
  457. case NSOrderedSame: ci=0;break;
  458. default: NSLog(@"erorr dates %@, %@", dt2, dt1);break;
  459. }
  460. return ci;
  461. }
  462. - (void)refreshDay {
  463. NSMutableArray *arr = [NSMutableArray array];
  464. for (int i = 1; i < [self getDayNumber:self.year.integerValue month:self.month.integerValue].integerValue + 1; i ++) {
  465. [arr addObject:[NSString stringWithFormat:@"%d日", i]];
  466. }
  467. [self.dataArray replaceObjectAtIndex:2 withObject:arr];
  468. [self.pickerView reloadComponent:2];
  469. }
  470. - (NSString *)getDayNumber:(NSInteger)year month:(NSInteger)month{
  471. NSArray *days = @[@"31", @"28", @"31", @"30", @"31", @"30", @"31", @"31", @"30", @"31", @"30", @"31"];
  472. if (2 == month && 0 == (year % 4) && (0 != (year % 100) || 0 == (year % 400))) {
  473. return @"29";
  474. }
  475. return days[month - 1];
  476. }
  477. @end