Advertisement
Guest User

Untitled

a guest
May 29th, 2016
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. extension NSDate {
  2. func yearsFrom(date:NSDate) -> Int{
  3. return NSCalendar.currentCalendar().components(.Year, fromDate: self, toDate: date, options: []).year
  4. }
  5. func monthsFrom(date:NSDate) -> Int{
  6. return NSCalendar.currentCalendar().components(.Month, fromDate: self, toDate: date, options: []).month
  7. }
  8. func weeksFrom(date:NSDate) -> Int{
  9. return NSCalendar.currentCalendar().components(.WeekOfYear, fromDate: self, toDate: date, options: []).weekOfYear
  10. }
  11. func daysFrom(date:NSDate) -> Int{
  12. return NSCalendar.currentCalendar().components(.Day, fromDate: self, toDate: date, options: []).day
  13. }
  14. func hoursFrom(date:NSDate) -> Int{
  15. return NSCalendar.currentCalendar().components(.Hour, fromDate: self, toDate: date, options: []).hour
  16. }
  17. func minutesFrom(date:NSDate) -> Int{
  18. return NSCalendar.currentCalendar().components(.Minute, fromDate: self, toDate: date, options: []).minute
  19. }
  20. func secondsFrom(date:NSDate) -> Int{
  21. return NSCalendar.currentCalendar().components(.Second, fromDate: self, toDate: date, options: []).second
  22. }
  23.  
  24.  
  25. func offset(fromDate date:NSDate = NSDate()) -> (offset:Int,period:TimePeriod) {
  26. if yearsFrom(date) > 1 { return (yearsFrom(date), .Years) }
  27. if yearsFrom(date) > 0 { return (yearsFrom(date), .Year) }
  28. if monthsFrom(date) > 1 { return (monthsFrom(date), .Months) }
  29. if monthsFrom(date) > 0 { return (monthsFrom(date), .Month) }
  30. if weeksFrom(date) > 1 { return (weeksFrom(date), .Weeks) }
  31. if weeksFrom(date) > 0 { return (weeksFrom(date), .Week) }
  32. if daysFrom(date) > 1 { return (daysFrom(date), .Days) }
  33. if daysFrom(date) > 0 { return (daysFrom(date), .Day) }
  34. if hoursFrom(date) > 1 { return (hoursFrom(date), .Hours) }
  35. if hoursFrom(date) > 0 { return (hoursFrom(date), .Hour) }
  36. if minutesFrom(date) > 1 { return (minutesFrom(date), .Minutes) }
  37. if minutesFrom(date) > 0 { return (minutesFrom(date), .Minute) }
  38. if secondsFrom(date) > 1 { return (secondsFrom(date), .Seconds) }
  39. if secondsFrom(date) > 0 { return (secondsFrom(date), .Seconds) }
  40. return (0,.Now)
  41. }
  42.  
  43. func formatTimeOffset(fromDate date:NSDate = NSDate(), withFormatting formatting:((offset:Int,period:TimePeriod) -> String)) -> String {
  44. let currentOffset = offset(fromDate: date)
  45. return formatting(offset: currentOffset.offset, period: currentOffset.period)
  46. }
  47.  
  48. }
  49.  
  50. enum TimePeriod {
  51.  
  52. case Now
  53. case Second
  54. case Seconds
  55. case Minute
  56. case Minutes
  57. case Hour
  58. case Hours
  59. case Day
  60. case Days
  61. case Week
  62. case Weeks
  63. case Month
  64. case Months
  65. case Year
  66. case Years
  67.  
  68. }
  69.  
  70.  
  71. date.formatTimeOffset { (offset, period) -> String in
  72. switch period {
  73. case .Now : return "Now"
  74. case .Second : return "\(offset)" + "s"
  75. case .Seconds : return "\(offset)" + "s"
  76. case .Minute : return "\(offset)" + "m"
  77. case .Minutes : return "\(offset)" + "m"
  78. case .Hour : return "\(offset)" + "h"
  79. case .Hours : return "\(offset)" + "h"
  80. case .Day : return "\(offset)" + "d"
  81. case .Days : return "\(offset)" + "d"
  82. case .Week : return "\(offset)" + "w"
  83. case .Weeks : return "\(offset)" + "w"
  84. case .Month : return "\(offset)" + "m"
  85. case .Months : return "\(offset)" + "m"
  86. case .Year : return "\(offset)" + "y"
  87. case .Years : return "\(offset)" + "y"
  88. }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement