It looks like zsh can handle updating the time in the prompt quite simply and elegantly.
Instead, this seems to work:
TRAPDEBUG() {
case "$WIDGET" in
zle-line-finish)
zle reset-prompt
;;
*)
;;
esac
}
(I don't know if further cases will be required.)This updates the prompt after "enter" is pressed, but before the command is executed.