2017-05-20 55 views
3

在一个单元格中,我想在解析服务器的NSDate中显示时间。这是代码,但它不工作。没有什么改变,数据也没有被分析。Swift time ago from Parse createdAt date

if let createdat = (object?["createdAt"] as? String){ 
      let pastDate = Date(timeIntervalSinceNow: TimeInterval(createdat)!) 
      cell.TimeAgo.text = pastDate.timeAgoDisplay() 
     } 


     extension Date { 
      func timeAgoDisplay() -> String { 
     let secondsAgo = Int(Date().timeIntervalSince(self)) 

     let minute = 60 
     let hour = 60 * minute 
     let day = 24 * hour 
     let week = 7 * day 

     if secondsAgo < minute { 
      return "\(secondsAgo) sec ago" 
     } else if secondsAgo < hour { 
      return "\(secondsAgo/minute) min ago" 
     } else if secondsAgo < day { 
      return "\(secondsAgo/hour) hrs ago" 
     } else if secondsAgo < week { 
      return "\(secondsAgo/day) days ago" 
     } 

     return "\(secondsAgo/week) weeks ago" 
    } 
} 
+0

的可能的复制[在(月/日/小时/分钟/秒)两个NSDates之间的差异](http://stackoverflow.com/questions/27182023/getting-the-difference-between-two-nsdates-in-months-days-小时分钟秒) – luke

回答

5

如果你只是想要一个很久以前延长时间去回答的底部

我会告诉你一个例子只是为了获得秒前和后,我会告诉您的扩展已更新。

注意:如果你愿意,你可以直接使用从磷酸酶日期:

if let pastDate = (object?["createdAt"] as? Date){ 
     cell.TimeAgo.text = pastDate.timeAgoDisplay() 
    } 

例如何获得秒前与斯威夫特3

第一:要获得多少秒前我们需要检查,如果我们有一分钟或更少,得到当前日期减去前一分钟你可以写:

let minuteAgo = calendar.date(byAdding: .minute, value: -1, to: Date())! 

二:现在比较两个日期! (如果你的扩展名是我们自己替换你的日期),并获得这两个日期之间的差异。

if (minuteAgo < yourDate) { 
    let diff = Calendar.current.dateComponents([.second], from: yourDate, to: Date()).second ?? 0 
    print("\(diff) sec ago") 
} 

就是这样,现在你可以打印时间了!

所以您的分机是这样的: (这是一个简单的扩展,以获得时间前)

extension Date { 
    func timeAgoDisplay() -> String { 

     let calendar = Calendar.current 
     let minuteAgo = calendar.date(byAdding: .minute, value: -1, to: Date())! 
     let hourAgo = calendar.date(byAdding: .hour, value: -1, to: Date())! 
     let dayAgo = calendar.date(byAdding: .day, value: -1, to: Date())! 
     let weekAgo = calendar.date(byAdding: .day, value: -7, to: Date())! 

     if minuteAgo < self { 
      let diff = Calendar.current.dateComponents([.second], from: self, to: Date()).second ?? 0 
      return "\(diff) sec ago" 
     } else if hourAgo < self { 
      let diff = Calendar.current.dateComponents([.minute], from: self, to: Date()).minute ?? 0 
      return "\(diff) min ago" 
     } else if dayAgo < self { 
      let diff = Calendar.current.dateComponents([.hour], from: self, to: Date()).hour ?? 0 
      return "\(diff) hrs ago" 
     } else if weekAgo < self { 
      let diff = Calendar.current.dateComponents([.day], from: self, to: Date()).day ?? 0 
      return "\(diff) days ago" 
     } 
     let diff = Calendar.current.dateComponents([.weekOfYear], from: self, to: Date()).weekOfYear ?? 0 
     return "\(diff) weeks ago" 
    } 
} 

要使用它,这是非常简单的:

var now = Date() 
now.timeAgoDisplay() 
+0

我的回答正在进行中... –

+0

为什么我应该不解开我的代码。我之前已经展开过力量,如果让 – john

+0

完美!我的答案解决你的问题? –