获取两个日期的差异 - 斯威夫特

问题描述:

我无法获得日期差异函数的工作。它说NSDate不能隐式转换为'日期',但我没有看到立即的工作;使用as Date不起作用。获取两个日期的差异 - 斯威夫特

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

难道你不能只是将'NSDate'替换为'Date',它们是非常相似的,如果不是相同的话。还有很多其他问题可以告诉您如何获取日期之间的差异 – Nik

+0

我强烈建议使用ISO-8601日期格式,而不是DIY格式的字符串。 – alekop

更改您的所有NSDateDate,然后用这个替换您的requestedComponent

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

您的区别是:

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

FYI:您dateFormatter不工作这个“25/12/16 00:00:00” 这里是你的全班正确的形式:

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

谢谢,你是什么意思我的dateFormatter不工作与此...? – Alex

+0

@AlexAsher,在您的示例代码中,它将它作为“dd/MM/yy hh:mm:ss a”,它与您不匹配endTime“25/12/16 00:00:00”,因此您最终将与'nil'结束时间:) –

+0

@AlexAsher如果它确实回答你的问题,你能否也接受它? ta –