NSDate+CL.m 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //
  2. // NSDate+CL.m
  3. // CLWeeklyCalendarView
  4. //
  5. #import "NSDate+CL.h"
  6. @implementation NSDate (CL)
  7. -(NSDate *)getWeekStartDate: (NSInteger)weekStartIndex
  8. {
  9. int weekDay = [[self getWeekDay] intValue];
  10. NSInteger gap = (weekStartIndex <= weekDay) ? weekDay : ( 7 + weekDay );
  11. NSInteger day = weekStartIndex - gap;
  12. return [self addDays:day];
  13. }
  14. -(NSNumber *)getWeekDay
  15. {
  16. #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
  17. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
  18. NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:self];
  19. #else
  20. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  21. NSDateComponents *comps = [gregorian components:NSCalendarUnitWeekday fromDate:self];
  22. #endif
  23. return [NSNumber numberWithInteger:([comps weekday] - 1)];
  24. }
  25. -(NSDate *)addDays:(NSInteger)day
  26. {
  27. NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
  28. dayComponent.day = day;
  29. NSCalendar *theCalendar = [NSCalendar currentCalendar];
  30. return [theCalendar dateByAddingComponents:dayComponent toDate:self options:0];
  31. }
  32. -(NSString *)getDayOfWeekShortString
  33. {
  34. static NSDateFormatter *shortDayOfWeekFormatter;
  35. if(!shortDayOfWeekFormatter){
  36. shortDayOfWeekFormatter = [[NSDateFormatter alloc] init];
  37. //danson 显示星期几的文字类型
  38. NSLocale* zh_CN = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
  39. [shortDayOfWeekFormatter setLocale:zh_CN];
  40. [shortDayOfWeekFormatter setDateFormat:@"E"];
  41. }
  42. return [shortDayOfWeekFormatter stringFromDate:self];
  43. }
  44. -(NSString *)getDateOfMonth
  45. {
  46. static NSDateFormatter *dateFormaater;
  47. if(!dateFormaater){
  48. dateFormaater = [[NSDateFormatter alloc] init];
  49. NSLocale* en_AU_POSIX = [[NSLocale alloc] initWithLocaleIdentifier:@"en_AU_POSIX"];
  50. [dateFormaater setLocale:en_AU_POSIX];
  51. [dateFormaater setDateFormat:@"d"];
  52. }
  53. return [dateFormaater stringFromDate:self];
  54. }
  55. - (NSDate*)midnightDate {
  56. #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
  57. return [[NSCalendar currentCalendar] dateFromComponents:[[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:self]];
  58. #else
  59. return [[NSCalendar currentCalendar] dateFromComponents:[[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:self]];
  60. #endif
  61. }
  62. -(BOOL) isSameDateWith: (NSDate *)dt{
  63. return ([[self midnightDate] isEqualToDate: [dt midnightDate]])?YES:NO;
  64. }
  65. - (BOOL)isDateToday {
  66. return [[[NSDate date] midnightDate] isEqual:[self midnightDate]];
  67. }
  68. - (BOOL)isWithinDate: (NSDate *)earlierDate toDate:(NSDate *)laterDate
  69. {
  70. NSTimeInterval timestamp = [[self midnightDate] timeIntervalSince1970];
  71. NSDate *fdt = [earlierDate midnightDate];
  72. NSDate *tdt = [laterDate midnightDate];
  73. BOOL isWithinDate = (timestamp >= [fdt timeIntervalSince1970] && timestamp <= [tdt timeIntervalSince1970]);
  74. return isWithinDate;
  75. }
  76. - (BOOL)isPastDate {
  77. NSDate* now = [NSDate date];
  78. if([[now earlierDate:self] isEqualToDate:self]) {
  79. return YES;
  80. } else {
  81. return NO;
  82. }
  83. }
  84. @end
  85. // 版权属于原作者
  86. // http://code4app.com (cn) http://code4app.net (en)
  87. // 发布代码于最专业的源码分享网站: Code4App.com