簡體   English   中英

獲得兩個日期的差異 - 斯威夫特

[英]Getting the difference in two dates - Swift

我不能讓日期差異功能起作用。 它說NSDate不能隱含地轉換為'Date',但我沒有看到立即解決這個問題; 使用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.
    }
}

將所有NSDate更改為Date ,然后用以下內容替換您的requestedComponent

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

你的區別將是:

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

僅供參考:您的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.
     }
}

我認為這將有所幫助。它將打印從兩個日期到兩個日期之間的所有月份

   let dateFormtter = DateFormatter()
    dateFormtter.dateFormat = "yyyy-MM-dd"

    let startDate = dateFormtter.date(from: fromTF.text!)
    let endDate = dateFormtter.date(from: toTF.text!)

 func getMonthAndYearBetween(from start: String, to end: String) - > 
[String] {

    let format = DateFormatter()
    format.dateFormat = "yyyy-MM-dd"

    guard let startDate = format.date(from: start),
        let endDate = format.date(from: end) else {
            return []
    }

    let calendar = Calendar(identifier: .gregorian)
    let components = calendar.dateComponents(Set([.month,.day]), 
   from: startDate, to: endDate)

    var allDates: [String] = []
    let dateRangeFormatter = DateFormatter()
    dateRangeFormatter.dateFormat = "yyyy-MM-dd"

    for i in 0 ... components.month! {
        guard let date = calendar.date(byAdding: .month , value: i, to: startDate) else {
            continue
        }

        let formattedDate = dateRangeFormatter.string(from: date)
        allDates += [formattedDate]

        print(allDates)
    }
    return allDates
}

像這樣調用上面的方法

     print(getMonthAndYearBetween(from: fromTF.text!, to: 
                    toTF.text!))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM