One approach for a ‘timer’ is to use a dynamic ‘Delay’ action with an expression along with the various date features to determine how long to wait.
The concept is discussed a bit in this announcement post from when Dynamic Delays were released:
It’s a bit of an anti-pattern to frequently update a variable periodically with a accumulating duration. Instead, a better approach would be to snapshot either your start time or target end time in a variable and then use the related date expression features noted above.
For the display side of things, an ideal solution would probably be to use the new Custom Tiles: Access to Things and Variables feature that is in beta, but you would need some basic HTML + JavaScript knowledge for that approach.
Since you’re on SmartThings, there’s also a number of community developed drivers targeting this space. I don’t personally use them, but I’ve seen them mentioned in the SmartThings community a few times.