NSDate+Common.m 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. //
  2. // NSDate+Common.m
  3. // TIMChat
  4. //
  5. // Created by AlexiChen on 16/3/16.
  6. // Copyright © 2016年 AlexiChen. All rights reserved.
  7. //
  8. #import "NSDate+Common.h"
  9. @implementation NSDate (Common)
  10. #define kMinuteTimeInterval (60)
  11. #define kHourTimeInterval (60 * kMinuteTimeInterval)
  12. #define kDayTimeInterval (24 * kHourTimeInterval)
  13. #define kWeekTimeInterval (7 * kDayTimeInterval)
  14. #define kMonthTimeInterval (30 * kDayTimeInterval)
  15. #define kYearTimeInterval (12 * kMonthTimeInterval)
  16. - (BOOL)isToday
  17. {
  18. NSCalendar *cal = [NSCalendar currentCalendar];
  19. NSDateComponents *components = [cal components:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:[NSDate date]];
  20. NSDate *today = [cal dateFromComponents:components];
  21. components = [cal components:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:self];
  22. NSDate *otherDate = [cal dateFromComponents:components];
  23. if([today isEqualToDate:otherDate])
  24. {
  25. return YES;
  26. }
  27. return NO;
  28. }
  29. - (BOOL)isYesterday
  30. {
  31. NSCalendar *cal = [NSCalendar currentCalendar];
  32. NSDateComponents *components = [cal components:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:[NSDate date]];
  33. NSDate *today = [cal dateFromComponents:components];
  34. NSDate *yesterday = [today dateByAddingTimeInterval: -kDayTimeInterval];
  35. components = [cal components:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:self];
  36. NSDate *otherDate = [cal dateFromComponents:components];
  37. if([yesterday isEqualToDate:otherDate])
  38. {
  39. return YES;
  40. }
  41. return NO;
  42. }
  43. - (NSString *)shortTimeTextOfDate
  44. {
  45. NSDate *date = self;
  46. NSTimeInterval interval = [date timeIntervalSinceDate:[NSDate date]];
  47. interval = -interval;
  48. if ([date isToday])
  49. {
  50. // 今天的消息
  51. NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
  52. [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  53. [dateFormat setAMSymbol:ASLocalizedString(@"上午")];
  54. [dateFormat setPMSymbol:ASLocalizedString(@"下午")];
  55. NSString *dateString = [dateFormat stringFromDate:date];
  56. return dateString;
  57. }
  58. else if ([date isYesterday])
  59. {
  60. // 昨天
  61. return ASLocalizedString(@"昨天");
  62. }
  63. else if (interval < kWeekTimeInterval)
  64. {
  65. // 最近一周
  66. // 实例化一个NSDateFormatter对象
  67. NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
  68. dateFormat.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
  69. [dateFormat setDateFormat:@"ccc"];
  70. NSString *dateString = [dateFormat stringFromDate:date];
  71. return dateString;
  72. }
  73. else
  74. {
  75. NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
  76. NSDateComponents *today = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]];
  77. if ([components year] == [today year])
  78. {
  79. // 今年
  80. NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
  81. [dateFormat setDateFormat:@"MM-dd"];
  82. NSString *dateString = [dateFormat stringFromDate:date];
  83. return dateString;
  84. }
  85. else
  86. {
  87. // 往年
  88. NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
  89. [dateFormat setDateFormat:@"yy-MM-dd"];
  90. NSString *dateString = [dateFormat stringFromDate:date];
  91. return dateString;
  92. }
  93. }
  94. return nil;
  95. }
  96. - (NSString *)timeTextOfDate
  97. {
  98. NSDate *date = self;
  99. NSTimeInterval interval = [date timeIntervalSinceDate:[NSDate date]];
  100. interval = -interval;
  101. // 今天的消息
  102. NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
  103. [dateFormat setDateFormat:@"aHH:mm"];
  104. [dateFormat setAMSymbol:ASLocalizedString(@"上午")];
  105. [dateFormat setPMSymbol:ASLocalizedString(@"下午")];
  106. NSString *dateString = [dateFormat stringFromDate:date];
  107. if ([date isToday])
  108. {
  109. // 今天的消息
  110. return dateString;
  111. }
  112. else if ([date isYesterday])
  113. {
  114. // 昨天
  115. return [NSString stringWithFormat:ASLocalizedString(@"昨天 %@"), dateString];
  116. }
  117. else if (interval < kWeekTimeInterval)
  118. {
  119. // 最近一周
  120. // 实例化一个NSDateFormatter对象
  121. NSDateFormatter* weekFor = [[NSDateFormatter alloc] init];
  122. weekFor.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
  123. [weekFor setDateFormat:@"ccc"];
  124. NSString *weekStr = [weekFor stringFromDate:date];
  125. return [NSString stringWithFormat:@"%@ %@", weekStr, dateString];
  126. }
  127. else
  128. {
  129. NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
  130. NSDateComponents *today = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]];
  131. if ([components year] == [today year])
  132. {
  133. // 今年
  134. NSDateFormatter *mdFor = [[NSDateFormatter alloc] init];
  135. [mdFor setDateFormat:@"MM-dd"];
  136. NSString *mdStr = [mdFor stringFromDate:date];
  137. return [NSString stringWithFormat:@"%@ %@", mdStr, dateString];
  138. }
  139. else
  140. {
  141. // 往年
  142. NSDateFormatter *ymdFormat = [[NSDateFormatter alloc] init];
  143. [ymdFormat setDateFormat:@"yy-MM-dd"];
  144. NSString *ymdString = [ymdFormat stringFromDate:date];
  145. return [NSString stringWithFormat:@"%@ %@", ymdString, dateString];;
  146. }
  147. }
  148. return nil;
  149. }
  150. @end