iOS 常见日历NSCalendar相关方法封装及日期标注的demo

1,972 阅读2分钟
日历是APP中常见的组件,在实现日历组件过程中,我们往往会用到很多日历类的相关方法,我写了一个分类在NSDate+EXCalendar中,用于帮助实现日历组件,封装的方法有:
/**
 日期转字符串

 @param date 日期
 @param dateFormat 日期格式
 @return 字符串
 */
+(NSString*)convertDateToDateString:(NSDate*)date andDateFormat:(NSString*)dateFormat;


/**
 字符串转日期

 @param dateString 字符串
 @param dateFormat 日期格式
 @return 日期
 */
+(NSDate*)convertDateStringToDate:(NSString*)dateString andDateFormat:(NSString*)dateFormat;


/**
 获取指定日期所在月份的第一天是星期几

 @param date 指定日期
 @return 该月第一天星期几
 */
+ (NSInteger)firstWeekdayInThisMonth:(NSDate *)date;


/**
 获取指定日期所在月份的第一天日期

 @param date 指定日期
 @return 第一天日期
 */
+(NSDate*)getFirstDayofThisMonthWithDate:(NSDate*)date;


/**
 获取指定日期所在月份的最后一天日期

 @param date 指定日期
 @param dateFormat 日期格式
 @return 最后一天日期
 */
+(NSDate*)getLastDayOfThisMonthWithDate:(NSDate*)date andDateFormat:(NSString*)dateFormat;


/**
 获取指定日期是星期几

 @param date 日期
 @return 星期几
 */
+(NSInteger)weekdayOfDestinationDate:(NSDate*)date;


/**
 获取指定日期所在月份一共有多少天

 @param date 指定日期
 @return 该日期所在月份共有多少天
 */
+(NSInteger)totaldaysInThisMonth:(NSDate *)date;



/**
 比较两个日期字符串的大小

 @param oneDateStr 日期一
 @param TwoDateStr 日期二
 @param dateFormat 日期格式
 @return 比较结果
 */
+(NSComparisonResult)compareDateWithOneDate:(NSString *)oneDateStr andTwoDate:(NSString *)TwoDateStr andDateFormat:(NSString*)dateFormat;



/**
 比较一组日期,获取最小值和最大值

 @param dateArr 日期数组
 @param dateFormat 日期格式
 @return 最小值和最大值
 */
+(NSArray<NSString*>*)getMaxDateAndMinDateWithDateArr:(NSArray<NSString*>*)dateArr andDateFormat:(NSString*)dateFormat;



/**
 获取两个日期之间相差多少个月(只计算到具体月份,不算天数)

 @param startDateStr 开始日期
 @param endDateStr 结束日期
 @param dateFormat 日期格式
 @return 相差多少月份
 */
+(NSInteger)computeMonthsWithStartDate:(NSString *)startDateStr andEndDate:(NSString *)endDateStr andDateFormat:(NSString *)dateFormat;


/**
 获取指定日期相差n个月的日期

 @param dateStr 指定日期
 @param month 多少个月
 @param dateFormat 日期格式
 @return 目标日期
 */
+(NSString*)getDestinationDateFromDate:(NSString*)dateStr andMonth:(NSInteger)month andDateFormat:(NSString *)dateFormat;



/**
 筛选出一组日期和指定日期属于同一个月的日期

 @param dateArr 一组日期
 @param destinationDateStr 目标日期
 @param dateFormat 日期格式
 @return 筛选出的符合要求的日期数组
 */
+(NSArray<NSString*>*)filterSameMonthDateWithDateArr:(NSArray<NSString*>*)dateArr andDestinationDate:(NSString*)destinationDateStr andDateFormat:(NSString *)dateFormat;

另外,写了一个日历相关的控件,主要是用于在日历上面标注日期,方面查看,比直接显示文字看起来更方面,也更美观。主要的类:EXCustomCalendarView、EXCustomCalendarCell,效果如图:

效果图1 效果图2 效果图3

demo已经放在github上面了,需要的同学可以下载:demo
Tips

简书主页    掘金主页    github主页