toast
toast

Reputation: 1980

Adding elapsed TimeInterval to Date()

I'm trying to add the elapsed time to a Date() object (its for the resume button of a timed operation).

Below is the resume portion of the code responsible for calculating the altered startDate. I'm expecting it to add the elapsed TimeInterval to startDate.

This is the code:

print(startDate)
let elapsed = resumeTime - startDate.timeIntervalSinceReferenceDate
print(elapsed)
startDate.addTimeInterval(elapsed)
print(startDate)

This is the output when I paused the timer for about 3 seconds after about 2 minutes of runtime.

Output:

2016-11-17 08:24:15 +0000
110.831687986851
2016-11-17 08:26:06 +0000

The second printed date should be more like:

2016-11-17 08:24:18 +0000

The definition for addTimeInterval is:

Add a TimeInterval to this Date.

Isn't this exactly what I want? Am I interpreting this incorrectly?

Note, resumeTime is defined when the pause button is tapped. It is set like this:

resumeTime = Date.timeIntervalSinceReferenceDate

Thanks.

Upvotes: 1

Views: 131

Answers (2)

ganzogo
ganzogo

Reputation: 2614

I think the mistake in your code is that you never set the startDate again, so your elapsed calculation is always based on when the app first ran, not the time elapsed since the last time you paused.

Upvotes: 1

Idan
Idan

Reputation: 5450

This is the output when I paused the timer for about 3 seconds after about 2 minutes of runtime.

Although, your elapsed time is 2 min.

Make sure that you start elapsed in the right place, also make sure that this line generates the desired timestamp:

resumeTime = Date.timeIntervalSinceReferenceDate

Here is example of code very similar to yours, addTimeInterval does work well.

let resume = Date().timeIntervalSinceReferenceDate + 2

print(startDate)
let elapsed = resume - startDate.timeIntervalSinceReferenceDate
print(elapsed)
startDate.addTimeInterval(elapsed)
print(startDate)

Output

2016-11-17 08:53:34 +0000
2.00815904140472
2016-11-17 08:53:36 +0000

Upvotes: 1

Related Questions