The main reason is that the $date may have changed from what it was at %starttime.
Assuming that the two $date's can only vary by one day (Commander currently stores only the hour:mins:secs, so this is a rather safe assumption):
$duration($calc(($ctime($date %finishtime) - $ctime($date %starttime) + 86400) % 86400))
would deal with the problem: if, for example, %starttime was 22:20:30 and %finishtime was 01:10:40 the script correctly outputs "2hrs 50mins 10secs".