2017-05-20 10 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

可能な重複(月/日/時/分/秒)で2つのNSDateの違いを取得する](http://stackoverflow.com/questions/27182023/getting-the-difference-between-two-nsdates-in-months-days-時間 - 分 - 秒) – luke

答えて

5

あなただけの日のための拡張子は答え

の下に行く時間前にしたい場合、私はちょうど前に秒を取得するために、あなたの例を紹介し、私が紹介した後、拡張機能が更新されました。

注:あなたがしたい場合は、Paseのから直接日付を使用することができます。

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

スウィフト3で前に秒を取得する方法例:

まず:前の秒数を取得するには現在の日付から1分を引いた日付を取得するには、1分以内かどうかを確認する必要があります。

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

Second:Now 2つの日付を比較してください! (延長の場合は、あなたの日付を自己に置き換えます)、この2つの日付の違いを取得します。

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

パーフェクト!私の答えはあなたの問題を解決する? –