         return date.timeIntervalSince1970
     }
 
+    public func fromNow() -> String {
+        let timeDiffDuration = moment().intervalSince(self)
+        let deltaSeconds = Int(timeDiffDuration.seconds)
+        let deltaMinutes = Int(timeDiffDuration.minutes)
+        
+        var value: Int!
+        
+        if deltaSeconds < 5 {
+            // Just Now
+            return NSDateTimeAgoLocalizedStrings("Just now")
+        } else if deltaSeconds < minuteInSeconds {
+            // Seconds Ago
+            return stringFromFormat("%%d %@seconds ago", withValue: deltaSeconds)
+        } else if deltaSeconds < 120 {
+            // A Minute Ago
+            return NSDateTimeAgoLocalizedStrings("A minute ago")
+        } else if deltaMinutes < minuteInSeconds {
+            // Minutes Ago
+            return stringFromFormat("%%d %@minutes ago", withValue: deltaMinutes)
+        } else if deltaMinutes < 120 {
+            // An Hour Ago
+            return NSDateTimeAgoLocalizedStrings("An hour ago")
+        } else if deltaMinutes < dayInSeconds {
+            // Hours Ago
+            value = Int(floor(Float(deltaMinutes / minuteInSeconds)))
+            return stringFromFormat("%%d %@hours ago", withValue: value)
+        } else if deltaMinutes < (dayInSeconds * 2) {
+            // Yesterday
+            return NSDateTimeAgoLocalizedStrings("Yesterday")
+        } else if deltaMinutes < weekInSeconds {
+            // Days Ago
+            value = Int(floor(Float(deltaMinutes / dayInSeconds)))
+            return stringFromFormat("%%d %@days ago", withValue: value)
+        } else if deltaMinutes < (weekInSeconds * 2) {
+            // Last Week
+            return NSDateTimeAgoLocalizedStrings("Last week")
+        } else if deltaMinutes < monthInSeconds {
+            // Weeks Ago
+            value = Int(floor(Float(deltaMinutes / weekInSeconds)))
+            return stringFromFormat("%%d %@weeks ago", withValue: value)
+        } else if deltaMinutes < (dayInSeconds * 61) {
+            // Last month
+            return NSDateTimeAgoLocalizedStrings("Last month")
+        } else if deltaMinutes < yearInSeconds {
+            // Month Ago
+            value = Int(floor(Float(deltaMinutes / monthInSeconds)))
+            return stringFromFormat("%%d %@months ago", withValue: value)
+        } else if deltaMinutes < (dayInSeconds * (yearInSeconds * 2)) {
+            // Last Year
+            return NSDateTimeAgoLocalizedStrings("Last Year")
+        }
+        
+        // Years Ago
+        value = Int(floor(Float(deltaMinutes / yearInSeconds)))
+        return stringFromFormat("%%d %@years ago", withValue: value)
+    }
+
     // Private methods
 
     func convert(value: Double, _ unit: TimeUnit) -> Double {

            return value * 31536000 // 365 days
        }
    }
}

extension Moment: CustomStringConvertible {

 call moment() with one of the supported input types.
*/
public struct Moment: Comparable {
    private let minuteInSeconds = 60
    private let dayInSeconds = 1440
    private let weekInSeconds = 10080
    private let monthInSeconds = 312480
    private let yearInSeconds = 114055200

    public let date: NSDate
    public let timeZone: NSTimeZone
    public let locale: NSLocale
