2017-05-20 1 views
3

Dans une cellule, je veux afficher l'heure depuis le NSDate dans le serveur Parse. Voici le code mais ça ne marche pas. Rien ne change et les données ne sont pas analysées.Il y a peu de temps depuis 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

double possible de [ Obtenir la différence entre deux NSDates en (mois/jours/heures/minutes/secondes)] (http://stackoverflow.com/questions/27182023/getting-the-difference-between-two-nsdates-in-months-days- heures-minutes-secondes) – luke

Répondre

5

Si vous voulez juste une prorogation du délai pour la date Ago aller au fond de la réponse

Je vais vous montrer un exemple juste pour obtenir il y a quelques secondes et après je vais montrer votre extension a été mise à jour

Remarque: vous pouvez utiliser directement la date à partir Pase si vous voulez:

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

exemple comment obtenir secondes il y a avec Swift 3:

Première: Pour obtenir il y a le nombre de secondes nous devons vérifier si nous avons une minute ou moins, pour obtenir la date actuelle moins une minute, vous pouvez écrire que:

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

Deuxième: maintenant, comparez les 2 dates! (Dans le cas de votre extension, nous remplaçons yourDate par vous-même) et obtenons la différence entre ces 2 dates.

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

C'est tout, maintenant vous pouvez imprimer l'heure!

donc votre extension est comme ceci: (Ceci est une simple extension pour obtenir le temps auparavant)

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" 
    } 
} 

Pour l'utiliser, ce qui est très simple:

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

Ma réponse est en cours ... –

+0

pourquoi devrais-je ne pas déballer mon code. J'ai été force de déballer avant et je l'ai fixé avec si laisser – john

+0

Parfait! ma réponse résout ton problème? –