在iOS中查找两个日期的差异

在iOS中查找两个日期的差异,ios,swift,nsdateformatter,nsdatecomponents,nsdatecomponentsformatter,Ios,Swift,Nsdateformatter,Nsdatecomponents,Nsdatecomponentsformatter,我不确定我做错了什么,我需要找出两个日期之间的差异并从中提取秒数,下面是我的代码。我没有得到正确的秒数。有秒之差 public func captureStartTime() { captureStartDateTime = Date() } public func captureEndTime(eventType: String, eventElement: String) { let difference = Date().timeIntervalSince(c

我不确定我做错了什么,我需要找出两个日期之间的差异并从中提取秒数,下面是我的代码。我没有得到正确的秒数。有秒之差

  public func captureStartTime() {
    captureStartDateTime = Date()
  }

  public func captureEndTime(eventType: String, eventElement: String) {
    let difference = Date().timeIntervalSince(captureStartDateTime)
    let interval = Int(difference)
    let seconds = interval % 60
    let secondsDescrp = String(format: "%02d", seconds)
}

interval
是您想要的答案。这是两个日期之间的总秒数


您的
seconds
值只有在您想从总秒数中计算小时数、分钟数和秒数或分钟数和秒数时才有用。

使用以下代码获取两个日期之间的差值,当按下按钮1时,将当前时间存储在
startTime
中,当按下按钮2时,将当前日期时间存储在
endTime
中,查看此代码,我希望这对您有所帮助

  public func captureStartTime() {
    captureStartDateTime = Date()
  }

  public func captureEndTime(eventType: String, eventElement: String) {
    let difference = Date().timeIntervalSince(captureStartDateTime)
    let interval = Int(difference)
    let seconds = interval % 60
    let secondsDescrp = String(format: "%02d", seconds)
}
var startTime:Date!
var endTime:Date!

@IBAction func buttonStartTime(_ sender: UIButton) {
    startTime = Date()
}


@IBAction func buttonEndTime(_ sender: UIButton) {
    endTime = Date()

    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [.second]
    formatter.unitsStyle = .full
    let difference = formatter.string(from: startTime, to: endTime)!
    print(difference)//output "8 seconds"
}
输出

8秒


您还可以使用默认的日期组件,并根据这些组件比较您的日期,您可以得到年、月、日等的差异

let dateString1 =  "2019-03-07T14:20:20.000Z"

let dateString2 =  "2019-03-07T14:20:40.000Z"



//set date formate

let Dateformatter = DateFormatter()

Dateformatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"



//convert string to date

let dateold = Dateformatter.date(from: dateString1)!

 let datenew = Dateformatter.date(from: dateString2)!



 //use default datecomponents with two dates

 let calendar1 = Calendar.current

 let components = calendar1.dateComponents([.year,.month,.day,.hour,.minute,.second], from:  dateold, to:   datenew)



 let seconds = components.second

 print("Seconds: \(seconds)")

日期可能重复。timeIntervalSince(:)将提供以秒为单位的间隔。通过%60操作,您是否正在尝试将其转换为分和秒?正如您的代码所示,
difference
是现在到
captureStartDateTime
之间的秒数,感谢您的分享,但是仍然interval没有给出精确的秒数。如果前一个日期和当前日期之间有10-15秒的时间,则会有差异。我也使用了NSCalendar,但它仍然没有给出准确的答案。你需要用更具体的细节更新你的问题。显示正在使用的确切值以及实际和预期结果。我需要在两次单击按钮之间获得秒数,因此在单击一次按钮时,我已将日期检索为captureStartDateTime,在单击第二次按钮时,我检索当前日期和时间,并尝试在间隔内查找秒数。