I can't see what values are going into the calculation, and neither can you. As soon as you have a previous time stamp that is valid you overwrite it with the current one and lose the ability to repeat the IntCk() calculation.
Look at what rounding is done by IntCk(), and whether 29 minutes is 0 hours or 1 hour. Understand what the funciton will give you, and then look at the data you are sending it. At the point where you calculate the DIFF interval, put the contributing values out to the log so you can review them and verify you have set up the function correctly.
I'm a little mystified at the need to analyse call records for a clinical trial. Or perhaps I have been fortunate not to have foreign accents disturb my dinner with offers for aspirin.
Kind regards
David