.h文件
@interface NSDate (XZCalendar)
#pragma mark - 獲取日
+ (NSInteger)day:(NSDate *)date;
#pragma mark - 獲取月
+ (NSInteger)month:(NSDate *)date;
#pragma mark - 獲取年
+ (NSInteger)year:(NSDate *)date;
#pragma mark - 獲取當(dāng)月第一天周幾
+ (NSInteger)firstWeekdayInThisMonth:(NSDate *)date;
#pragma mark - 獲取當(dāng)前月有多少天
+ (NSInteger)totaldaysInMonth:(NSDate *)date;
/**
獲取與當(dāng)前月相差數(shù)月的date
@param date 已知的date 根據(jù)這個(gè)date獲取其他月
@param poor 與date的月份差距 (上月為負(fù),下月為正)
*/
+ (NSDate *)getNewDateWithDate:(NSDate *)date poorCount:(NSInteger)poor;
/**
判斷兩個(gè)date是否同月
@param date1 第一個(gè)date
@param date2 第二個(gè)date
@return yes/no
*/
+ (BOOL)isSameDate:(NSDate *)date1 date2:(NSDate *)date2;
@end
.m 文件
@implementation NSDate (XZCalendar)
#pragma mark -- 獲取日
+ (NSInteger)day:(NSDate *)date{
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
return components.day;
}
#pragma mark -- 獲取月
+ (NSInteger)month:(NSDate *)date{
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
return components.month;
}
#pragma mark -- 獲取年
+ (NSInteger)year:(NSDate *)date{
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
return components.year;
}
#pragma mark -- 獲得當(dāng)前月份第一天星期幾
+ (NSInteger)firstWeekdayInThisMonth:(NSDate *)date{
NSCalendar *calendar = [NSCalendar currentCalendar];
//設(shè)置每周的第一天從周幾開始,默認(rèn)為1,從周日開始
[calendar setFirstWeekday:1];//1.Sun. 2.Mon. 3.Thes. 4.Wed. 5.Thur. 6.Fri. 7.Sat.
NSDateComponents *comp = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [calendar dateFromComponents:comp];
NSUInteger firstWeekday = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:firstDayOfMonthDate];
//若設(shè)置從周日開始算起則需要減一,若從周一開始算起則不需要減
return firstWeekday - 1;
}
#pragma mark -- 獲取當(dāng)前月共有多少天
+ (NSInteger)totaldaysInMonth:(NSDate *)date{
NSRange daysInLastMonth = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
return daysInLastMonth.length;
}
#pragma mark - 獲取其他月的數(shù)據(jù)
+ (NSDate *)getNewDateWithDate:(NSDate *)date poorCount:(NSInteger)poor{
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.month = poor;
NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:date options:0];
return newDate;
}
// 判斷是否是同一月
+ (BOOL)isSameDate:(NSDate *)date1 date2:(NSDate *)date2{
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlag = NSCalendarUnitYear | NSCalendarUnitMonth;
NSDateComponents *comp1 = [calendar components:unitFlag fromDate:date1];
NSDateComponents *comp2 = [calendar components:unitFlag fromDate:date2];
return (([comp1 month] == [comp2 month]) && ([comp1 year] == [comp2 year]));
}
@end
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者