2017-06-14 2 views
1

Was ist der einfachste Weg, um die Anzahl der Stunden zwischen 2 Daten mit SwiftDate Lib zu bekommen?Stunden zwischen Daten mit SwiftDate

In diesem Fall könnten Stunden Tage/Minuten sein oder was auch immer ich beim nächsten Mal brauche.

Ich sehe, ich kann wahrscheinlich (date1 - date2)/60 * 60 tun, aber das fühlt sich einfach nicht richtig an.

+0

Wie vadian sagt, können Sie 'let value = Calendar.current.dateComponents ([. Hour], von: date1 bis: date2) .hour!'. Aber wenn dies für die Anzeige der verstrichenen Zeit in der Benutzeroberfläche war, würde ich nur die benötigten 'DateComponents' erhalten und' DateComponentsFormatter' für eine nette lokalisierte Zeichenkette mit vielen großartigen Anpassungsoptionen verwenden. – Rob

+0

@Rob, das für schnelle Überprüfung der Logikprüfung ist. Ich bin 'MTDates' gewohnt, aber in swift musst du immer' Date' in 'NSDate' umwandeln, damit es funktioniert. In 'MTDates' würde' mt_hoursSinceDate' für genau diesen Zweck funktionieren. 'SwiftDate' scheint ziemlich groß zu sein, ich bin überrascht, dass ich nicht finden konnte, was ich brauche. –

Antwort

1

In SwiftDate können Sie ganz einfach tun

(date1 - date2).in(.hour) 
+0

Das war's, danke! –

1

Calendar kann das tun:

let calendar = Calendar.current 
let components = calendar.dateComponents([.hour], from: date1, to: date2) 
let hours = components.hour! 

oder als Einzeiler:

let hours = Calendar.current.dateComponents([.hour], from: date1, to: date2).hour! 

oder als Date Erweiterung:

extension Date { 

    func hoursSince(date: Date) -> Int 
    { 
     return Calendar.current.dateComponents([.hour], from: date, to: self).hour! 
    } 
} 
+0

Danke für deine Antwort; das würde definitiv funktionieren, aber das fühlt sich auch nicht richtig an ... Ich war auf der Suche nach einem 1-Liner, ähnlich einem in MTDates 'Date1. mt_hoursSinceDate (date2) 'aber für' SwiftDate' lib (oder ähnlich). –

+0

Ich aktualisierte die Antwort mit einer Einzeiler- und einer "Date" -Erweiterung. – vadian

Verwandte Themen