2016-09-21 6 views
2

Ich kann die Datumsunterschiedfunktion nicht funktionieren. Es sagt NSDate ist nicht implizit in "Datum" umwandelbar, aber ich sehe keine unmittelbare Arbeit um diese; mit as Date funktioniert nicht.Den Unterschied in zwei Daten erhalten - Swift

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var dateLabelOutlet: UILabel! 

    let currentDate = NSDate() 
    let dateFormatter = DateFormatter() 

    let userCalendar = NSCalendar.current 

    let requestedComponent: NSCalendar.Unit = [ 
     NSCalendar.Unit.month, 
     NSCalendar.Unit.day, 
     NSCalendar.Unit.hour, 
     NSCalendar.Unit.minute, 
     NSCalendar.Unit.second, 

    ] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func printTime(){ 
     dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss a" 
     let startTime = NSDate() 
     let endTime = dateFormatter.date(from: "25/12/16 00:00:00") 

     let timeDifference = userCalendar.components(requestedComponent, from: startTime, to: endTime!, options: []) 

     dateLabelOutlet.text = "\(timeDifference.month) Months \(timeDifference.day) Days \(timeDifference.minute) Minutes \(timeDifference.second) Seconds" 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
+0

Kann man nicht einfach 'NSDate' zu' Date' ersetzen, sind sie extrem ähnlich, wenn nicht identisch. Es gibt viele andere Fragen, die Ihnen sagen, wie Sie den Unterschied zwischen den Daten erhalten – Nik

+0

Ich empfehle dringend die Verwendung des ISO-8601-Datumsformat anstelle einer DIY-Formatzeichenfolge. – alekop

Antwort

8

ändern alle Ihre NSDate zu Date, dann requestedComponent mit diesem ersetzen:

let requestedComponent: Set<Calendar.Component> = [ .month, .day, .hour, .minute, .second] 

Ihr Unterschied sein wird:

let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 

FYI: Ihr dateFormatter funktioniert nicht mit Dies "25/12/16 00:00:00" Hier ist Ihre ganze Klasse in korrekter Form:

class ViewController: UIViewController { 

    @IBOutlet weak var dateLabelOutlet: UILabel! 

    let currentDate = Date() 
    let dateFormatter = DateFormatter() 

    let userCalendar = Calendar.current 

    let requestedComponent: Set<Calendar.Component> = [.month,.day,.hour,.minute,.second] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func printTime() { 
     dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss" 
     let startTime = Date() 
     let endTime = dateFormatter.date(from: "25/12/16 00:00:00") 
     let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 

     dateLabelOutlet.text = "\(timeDifference.month) Months \(timeDifference.day) Days \(timeDifference.minute) Minutes \(timeDifference.second) Seconds" 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
+0

Danke und was meinst du mein DateFormatter funktioniert nicht mit diesem ...? – Alex

+0

@AlexAsher, in Ihrem Beispiel Code haben Sie es als "TT/MM/JJ hh: mm: ss a", die es nicht passt Sie endTime "25/12/16 00:00:00", so dass Sie am Ende mit 'nil' endTime :) –

+0

@AlexAsher auch, wenn es Ihre Frage beantwortet, können Sie bitte es auch akzeptieren? ta –

Verwandte Themen